Size of saved figure differs from size of frame2im(getframe(gcf))

5 Ansichten (letzte 30 Tage)
giannit
giannit am 27 Aug. 2020
Kommentiert: giannit am 28 Aug. 2020
I need to create big images in which displaying lot of annotations, but my computer has a low screen resolution 1366x768. So I looked on this site for a workaround to get bigger figures, and I found the command set(gcf, 'Position', get(0, 'Screensize')) which sets the figure size to 2134x1095 (I don't why this particular value though... is there a way to create figures with custom size in pixels?).
However, when using the frame2im(getframe(gcf)) command I get a 701x1366x3 matrix instead of a 1095x2134x3 matrix, am I doing something wrong? This is just an example to replicate the problem
clc; clear all; close all
figure('visible','off')
set(gcf, 'Position', get(0, 'Screensize'))
saveas(gcf, 'aaa.png')
im = frame2im(getframe(gcf));
[size(im) ; size(imread('aaa.png'))]

Antworten (1)

Ameer Hamza
Ameer Hamza am 27 Aug. 2020
Bearbeitet: Ameer Hamza am 27 Aug. 2020
saveas() is not a good option for exporting high-resolution images. Use exportgraphics() and specify the required resolution. See this example: https://www.mathworks.com/help/releases/R2020a/matlab/ref/exportgraphics.html#mw_b4d91f8c-574f-4574-89af-37d54c5a182b.
exportgraphics() was introduced in R2020a, for older versions, see print(). For example
print('filename.jpg', '-r300'); % for printing at 300dpi
print('filename.jpg', '-r300');
  7 Kommentare
Ameer Hamza
Ameer Hamza am 28 Aug. 2020
Ok. If you want to set the width and height of the figure in pixels, then you can specify a four-element vector like this [x y w h]. Where x is the distance (in pixels) from the left edge of screen, and y is the distance from the bottom of the screen. w and h are the width and height of the figure window.
set(gcf, 'Position', [0 0 500 500])
This command will set the figure window to the bottom left corner and set the width and height to 500 each.
giannit
giannit am 28 Aug. 2020
Thank you Ameer very kind, I tried with this code, but still the matrix and the image have different sizes, I begin to think that this problem cannot be solved easily
figure('visible','off')
set(gcf, 'Position', [0 0 500 500])
saveas(gcf, 'aaa.png') % 781x781
im = frame2im(getframe(gcf)); % 500x500
[size(im) ; size(imread('aaa.png'))]
ans =
500 500 3
781 781 3

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Printing and Saving finden Sie in Help Center und File Exchange

Tags

Produkte


Version

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by