Re: [心得] 間接儲存GUI中的Axes畫面已回收

看板MATLAB作者 (既選擇~就不後悔~)時間15年前 (2010/03/26 14:37), 編輯推噓1(103)
留言4則, 1人參與, 最新討論串3/3 (看更多)
※ 引述《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
其實他上面的CODE可以運作
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
也可以跑,只不過圖的size似乎改變了
04/08 12:04, 4F
文章代碼(AID): #1Bh5Obg5 (MATLAB)
文章代碼(AID): #1Bh5Obg5 (MATLAB)