Re: [心得] 間接儲存GUI中的Axes畫面已回收
※ 引述《prenlok (既選擇~就不後悔~)》之銘言:
: ※ 引述《zxvc (修行)》之銘言:
: : 我做了一個GUI可以用來畫一些數據圖,GUI上有許多controls,
: : 如Pushbuttions、Combo boxes。
: : 但最近在新增一個可以把畫出來的曲線saveas成png圖片的功能的時候遇到一個困擾,
: : 就是saveas會把GUI上的controls一起save到圖片中。
: : 我在google上搜到一個解決方法,
: : 簡單的說就是把一個axes物件copy(copyobj)到另一個空白的figure,再saveas。
: : 請參考:
: : http://www.mathworks.com/support/solutions/data/1-18VP2.html?solution=1-18VP2
: 小弟一直以來,也碰到用saveas會存不必要白色邊框這問題,
: 再參考完zxcv大大提供的網址,小弟試出下列的code,好像可以解決這個問題了:
: Image=imread('000.jpg');
: [y,x,z]=size(Image);
: figure, imshow(Image);
: [A map]=getframe(gcf);
: B=A(30+1:30+y,82+1:82+x,:);
: imwrite(B,'0000.jpg');
: 小弟研究一下,他邊框是左右各加82個pixels,上下則分別加30和56個pixels,
: 因此,先將目前figure的圖檔擷取到A陣列,再將原圖在A陣列的數值擷取出來至B,
: 最後imwrite寫出便可,我有試過不同大小的影像,邊框好像是固定不變的,所以,
: 用此code希望可以解決這問題,如果站上各高手有發現錯誤,歡迎指正,謝謝。
小弟剛剛測試,發現上面的code,在imshow如果會發生下列的情形,便會出事
Warning: Image is too big to fit on screen; displaying at xx%
於是又仔細研究一下imshow的指令,發現其實他有個設定,可以試不要邊框
imshow(Image,'Border','tight');
所以,程式整體可寫成:
Image=imread('000.jpg');
imshow(Image,'Border','tight');
%方法一:
set(gcf,'PaperPositionMode','auto');
saveas(gcf,'0000.jpg');
%方法二:
[A map]=getframe(gcf);
imwrite(A,'0000.jpg');
不過,如果圖檔太大,存檔後的圖,會因為imshow有設定將圖縮小的關係,變小
如果要存檔後的檔案大小一樣,這個問題目前就還不知道怎麼解。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.214.55
推
04/08 12:02, , 1F
04/08 12:02, 1F
→
04/08 12:02, , 2F
04/08 12:02, 2F
→
04/08 12:03, , 3F
04/08 12:03, 3F
→
04/08 12:04, , 4F
04/08 12:04, 4F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章