exponenta event banner

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 значения свойств для осей. 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] в пикселях. left и bottom элементы определяют положение нижнего левого угла прямоугольника. Положение относительно фигуры или осей, указанных в качестве первого входного аргумента для getframe. width и height элементы определяют размеры прямоугольника.

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

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

свернуть все

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

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

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

Примечание

Это некоторые важные соображения о размере cdata:

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

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

Ограничения

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

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

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

Подробнее

свернуть все

Пиксели

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

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

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

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

Совет

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

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

См. также

| | | | | |

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