getframe

Захват осей или рисунка в виде кадра фильма

Описание

пример

F = getframe захватывает текущие системы координат, которые появляются на экране как кадр фильма. F - структура, содержащая данные изображения. getframe захватывает оси того же размера, что и на экране. Он не захватывает метки такта или другое содержимое вне контура осей.

пример

F = getframe(ax) захватывает оси, идентифицированные ax вместо текущей системы координат.

пример

F = getframe(fig) захватывает рисунок, идентифицированную fig. Задайте рисунок, если необходимо захватить всю внутреннюю часть окна рисунка, включая заголовок осей, метки и отметки деления. Захваченный кадр фильма не включает меню рисунка и панели инструментов.

F = getframe(___,rect) захватывает область в прямоугольнике, заданную как rect. Задайте rect как четырехэлементный вектор вида [left bottom width height]. Используйте эту опцию с любым из ax или fig входные параметры в предыдущих синтаксисах.

Примеры

свернуть все

Создайте график случайных данных. Захват осей и возврат данных изображения. getframe захватывает внутреннюю часть осей и контур осей. Он не захватывает содержимое, которое выходит за пределы контура осей.

plot(rand(5))
F = getframe;

F - структура с полем cdata который содержит захваченные данные изображения.

Отобразите захваченные данные изображения с помощью imshow.

figure
imshow(F.cdata)

Создать объемную поверхностную диаграмму. Захват внутренней части окна рисунка, исключая меню и панели инструментов.

surf(peaks)
F = getframe(gcf);

F - структура с полем cdata который содержит захваченные данные изображения.

Отобразите захваченные данные изображения на рисунке с более темным фоном, используя imshow, чтобы вы могли увидеть захваченную область.

figure('Color',[0.5 0.5 0.5])
imshow(F.cdata)

Захват внутренней оси плюс запас в 30 пикселей в каждом направлении. Дополнительное поле необходимо для включения меток такта в систему координат захвата. В зависимости от размера меток такта, это поле может потребовать корректировки.

Создайте график случайных данных.

plot(rand(5))

Измените модули осей на пиксели и верните текущую систему координат положение. Третий и четвертый элементы вектора положения задают ширину и высоту осей в пикселях.

drawnow
ax = gca;
ax.Units = 'pixels';
pos = ax.Position
pos =

   73.8000   47.2000  434.0000  342.3000

Создайте вектор с четырьмя элементами, rect, которая задает прямоугольную область, покрывающую оси плюс требуемый запас. Первые два элемента rect задайте нижний левый угол прямоугольника относительно нижнего левого угла осей. Последние два элемента rect задайте ширину и высоту прямоугольника. Обнулите модули осей до значения по умолчанию 'normalized'.

marg = 30;
rect = [-marg, -marg, pos(3)+2*marg, pos(4)+2*marg];
F = getframe(gca,rect);
ax.Units = 'normalized';

Отобразите захваченные данные изображения на рисунке с более темным фоном, используя imshow, чтобы вы могли увидеть захваченную область.

figure('Color',[0.5 0.5 0.5])
imshow(F.cdata)

Вычислите поле вокруг осей так, чтобы захваченные данные изображения включали заголовок, подписи по осям и метки такта.

Создать график с заголовком и меткой оси X.

plot(rand(5))
xlabel('x values')
title('Plot of Random Data')

Измените модули осей на пиксели и сохраните Position и TightInset значения свойств для осей. The TighInset свойство является четырехэлементным вектором вида [left bottom right top]. Значениями являются поля, используемые вокруг осей для значений деления и текстовых меток.

drawnow
ax = gca;
ax.Units = 'pixels';
pos = ax.Position;
ti = ax.TightInset;

Создайте вектор с четырьмя элементами, rect, которая задает прямоугольную область, покрывающую оси плюс автоматически вычисляемый запас. Первые два элемента rect задайте нижний левый угол прямоугольника относительно нижнего левого угла осей. Последние два элемента rect задайте ширину и высоту прямоугольника.

rect = [-ti(1), -ti(2), pos(3)+ti(1)+ti(3), pos(4)+ti(2)+ti(4)];
F = getframe(ax,rect);

Отобразите захваченные данные изображения на рисунке с более темным фоном, используя imshow, чтобы вы могли увидеть захваченную область.

figure('Color',[0.5 0.5 0.5])
imshow(F.cdata)

Начиная с R2019b, можно отобразить плиточное размещение графиков, используя tiledlayout и nexttile функций. Вызовите tiledlayout функция для создания мозаичного графика размещения 2 на 1. Вызовите nexttile функция для создания объектов осей ax1 и ax2. Постройте график линии в каждой оси.

tiledlayout(2,1)
ax1 = nexttile;
plot(1:10,'b')
ax2 = nexttile;
plot(1:10,'r')

Захват содержимого нижних осей. getframe захватывает внутреннюю часть и границу графика. Он не захватывает значения деления или метки, которые выходят за контур графика.

F = getframe(ax2);

Отобразите захваченные данные изображения с помощью imshow.

figure
imshow(F.cdata)

Запись систем координат peaks вибрация функции при помощи getframe в цикле. Предварительно выделите массив для хранения кадров фильма.

Z = peaks;
surf(Z)
axis tight manual
ax = gca;
ax.NextPlot = 'replaceChildren';

loops = 40;
F(loops) = struct('cdata',[],'colormap',[]);
for j = 1:loops
    X = sin(j*pi/10)*Z;
    surf(X,Z)
    drawnow
    F(j) = getframe(gcf);
end

Воспроизведите фильм два раза.

fig = figure;
movie(fig,F,2)

Входные параметры

свернуть все

Оси для захвата, заданные как Axes объект или GeographicAxes объект. Используйте эту опцию, если вы хотите захватить оси, которая не является текущей системой координат.

getframe захватывает содержимое внутри наименьшего прямоугольника, который окружает контур осей. Если вы хотите захватить все значения деления и метки, используйте fig вместо этого входной параметр.

Пример: F = getframe(ax);

Фигура для захвата, заданный как Figure объект.

Прямоугольная область для захвата, заданная как четырехэлементный вектор вида [left bottom width height] в пикселях. The left и bottom элементы определяют положение нижнего левого угла прямоугольника. Положение относительно рисунка или осей, которые заданы в качестве первого входного параметра для getframe. The width и height элементы определяют размерности прямоугольника.

Задайте прямоугольник, который полностью содержится в окне рисунка.

Выходные аргументы

свернуть все

Кадр фильма, возвращенный как структура с двумя полями:

  • cdata - данные изображений, сохраненные в виде массива uint8 значения. Размер массива данных зависит от разрешения экрана.

  • colormap - Палитра. В истинных цветовых системах это поле пустое.

Примечание

Это некоторые важные факторы о размере cdata:

  • Если вы запрашиваете размер области, которая getframe захватывает (рисунок, оси или область, заданную rect), размер в пикселях может не совпадать с количеством элементов в cdata. Это различие связано с количеством элементов в cdata зависит от вашего разрешения экрана (и настроек операционной системы), но пикселей в MATLAB® может не соответствовать фактическим пикселям на экране.

  • Начиная с R2015b, если вы используете систему с высоким разрешением, то размер cdata может быть больше, чем в предыдущих релизах или в других системах.

Ограничения

  • getframe не поддерживает следующие функции в MATLAB Online™ или в Web Apps (MATLAB Compiler):

    • Захват содержимого рисунка, созданного с помощью uifigure функция или любые оси на рисунке.

    • Захват содержимого приложения, созданного с помощью App Designer или любых осей в приложении.

Подробнее о

свернуть все

Пиксели

Расстояния в пикселях не зависят от вашего системного разрешения в Windows® и системы Macintosh:

  • В системах Windows пиксель составляет 1/96 дюйма.

  • В системах Macintosh пиксель составляет 1/72 дюйма.

На Linux® систем, размер пикселя определяется вашим системным разрешением.

Совет

  • Для самой быстрой эффективности при использовании getframeубедитесь, что рисунок отображается на экране. Если рисунок не виден, getframe можно по-прежнему захватывать рисунок, но эффективность может быть медленнее.

  • Для дополнительного контроля разрешения данных изображения используйте print вместо этого функция. The cdata выходной аргумент с печатью возвращает данные изображения. The resolution входной параметр управляет разрешением изображения.

См. также

| | | | | |

Представлено до R2006a