Getframe function problem: Captured Image will not re-display at same size

1 view (last 30 days)
goal: I want to be able to capture the color by pixel location data (C-data?) of any current figure, scramble the locations of any black pixels in it, and then re-display the figure in scrambled form.
problem: After scrambling the figure and re-displaying it, it is now a different size than the old figure. I want it to be the same size as the unscrambled version.
I think the problem lies in how I am capturing and then displaying the image. This is how I am doing that: (after creating a current figure). Attached is a screenshot of the problem for clarity. I am running 2015a.
function[CurrentFigureData, CurrentFigureMap]= WriteCF2Workspace()
F = getframe(gcf);
[CurrentFigureData, CurrentFigureMap] = frame2im(F);
end
figure(2);ScreenDims = get(0, 'ScreenSize'); set(2,'position',ScreenDims, 'menubar','none'); image(CurrentFigureData); axis off;
  2 Comments
Image Analyst
Image Analyst on 3 Oct 2015
Why not just use an axes control with an image in it, instead of trying to do the whole figure?
Michael Bronstein
Michael Bronstein on 3 Oct 2015
Thanks for the idea. Could you explain how making that change would solve the problem? -Michael

Sign in to comment.

Answers (2)

Walter Roberson
Walter Roberson on 3 Oct 2015
curfig = gcf;
curfig_units = get(curfig, 'units');
curfig_size = get(curfig, 'Position');
curimage_h = findall(curfig, 'type', image');
curax = ancestor(curimage_h, 'axes');
fig2 = figure('Units', curfig_units, 'Position', curfig_size);
ax2 = copyobj(curfig_ax, fig2);
image2 = copyobj(curimage_h, ax2);
  7 Comments
Michael Bronstein
Michael Bronstein on 8 Aug 2018
And the other function:
function[CurrentFigureData, CurrentFigureMap]= WriteCF2Workspace() F = getframe(gca); [CurrentFigureData, CurrentFigureMap] = frame2im(F); end
Michael Bronstein
Michael Bronstein on 8 Aug 2018
I think it did end up working, but unfortunately I can't test it atm because I don't have access to my normal pc. Hope the code helps. Good luck!

Sign in to comment.


yuval
yuval on 8 Aug 2018
Replace gcf with gca, i.e.,
F = getframe(gca); [CurrentFigureData, CurrentFigureMap] = frame2im(F);

Community Treasure Hunt

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

Start Hunting!