saving png with the correct format (legend)

조회 수: 9 (최근 30일)
Mindy
Mindy 2013년 4월 19일
I am saving .fig to .png using saveas. I can't get the png output looks exactly like what the .fig shows on the screen. I have tried the set the .fig size to 1200 by 900 before saving, but the png output still looks like the default size. So the legend ends up taking 1/3 of the png space, and became a useless chart for me.
bmp works, but it saves too slow so when I automate the process to save many plots, it doesn't work. Plus, the size of file is too big.
I have been struggling with it for awhile, assistance will be appreciated

답변 (2개)

Image Analyst
Image Analyst 2013년 4월 19일

Shaun VanWeelden
Shaun VanWeelden 2013년 4월 19일
Also, check out any screenshot mfiles, most will figure out the position of the figure if you give it the figure handle. They will take a screenshot of exactly what is on the screen, just like pressing the "print screen" button on your keyboard would do, but just for the figure window.
My version I have used is here: (and if I remember correctly, you can just give it the values returned by get(fHandle,'position') for the rect. and it should work.
function [img] = getScreenShot(rect)
%example rect: [200 300 600 400]
%This could use a LOT of improvement!
screensize=get(0,'monitorpositions');
width=screensize(3);
height=screensize(4);
if rect<1
%they used normalized units
rect([1 3])=rect([1 3]).*width;
rect([2 4])=rect([2 4]).*height;
end
rect=max(rect,1);
rect([1 3])=min(rect([1 3]),width);
rect([2 4])=min(rect([2 4]),height);
rect=round(rect);
robo = java.awt.Robot;
target=java.awt.Rectangle(0,0,width,height);
image = robo.createScreenCapture(target); %take screenshot at rect
rasta=image.getRGB(0,0,width,height,[],0,width); %get RGB data from bufferedimage
rasta=256^3+rasta;
B=uint8(mod(rasta,256));
G=uint8(mod((rasta-int32(B))./256,256));
R=uint8(mod((rasta-256*int32(G))./65536,256));
X.cdata=uint8(zeros(height,width,3));
X.cdata(:,:,1)=reshape(R,[width height])';
X.cdata(:,:,2)=reshape(G,[width height])';
X.cdata(:,:,3)=reshape(B,[width height])';
img=X.cdata(height-rect(2)-rect(4):height-rect(2),rect(1):rect(1)+rect(3)-1,:);
end

카테고리

Help CenterFile Exchange에서 Creating, Deleting, and Querying Graphics Objects에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by