Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

getframe

捕获坐标区或图窗作为影片帧

说明

示例

F = getframe 捕获显示在屏幕上的当前坐标区作为影片帧。F 是一个包含图像数据的结构体。getframe 按照屏幕上显示的大小捕获这些坐标区。它并不捕获坐标区轮廓外部的刻度标签或其他内容。

示例

F = getframe(ax) 捕获 ax 标识的坐标区而非当前坐标区。

示例

F = getframe(fig) 捕获由 fig 标识的图窗。如果您需要捕获图窗窗口的整个内部区域(包括坐标区标题、标签和刻度线),则指定一个图窗。捕获的影片帧不包括图窗菜单和工具栏。

F = getframe(___,rect) 捕获 rect 定义的矩形内的区域。指定 rect 作为 [left bottom width height] 形式的四元素向量。将此选项用于上一语法中的 axfig 输入参量。

示例

全部折叠

绘制两个线条。捕获坐标区并返回图像数据。getframe 捕获坐标区的内部区域和坐标区轮廓。它并不捕获延伸到坐标区轮廓之外的内容。

plot([0 1; 1 2])
F = getframe;

Line plot in a figure

F 是一个结构体,其中包含的 cdata 字段中包含捕获的图像数据。

使用 imshow 显示捕获的图像数据。

figure
imshow(F.cdata)

Copy of the line plot

创建一个曲面图。捕获图窗窗口的内部区域,不包括菜单和工具栏。

surf(peaks)
F = getframe(gcf);

Surface plot in a figure that has a light gray background

F 是一个结构体,其中包含的 cdata 字段中包含捕获的图像数据。

使用 imshow 在背景较暗的图窗中显示捕获的图像数据,以便您能够看到捕获的区域。

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

Copy of the surface plot displayed in a larger figure. The background color of the larger figure is darker than the background color of the original figure.

捕获坐标区内部区域以及每个方向上 30 像素的边距。需要添加边距捕获帧中才能包括刻度标签。根据刻度标签的大小,可能需要调整边距。

绘制两个线条。

plot([0 1; 1 2])

Line plot in a figure that has a light gray background

将坐标区单位更改为像素并返回当前坐标区位置。位置向量的第三和第四个元素指定坐标区宽度和高度(以像素为单位)。

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)

Copy of the line plot displayed in a larger figure. The copy is tightly cropped around the axes to include the tick labels. The background color of the larger figure is darker than the background color of the original figure.

计算坐标区周围的边距,以使捕获的图像数据包括标题、坐标区标签和刻度标签。

创建一个带有标题和 x 轴标签的绘图。

plot([0 1; 1 2])
xlabel('x values')
title('Plot of Two Lines')

Line plot in a figure that has a light gray background

将坐标区单位更改为像素并存储坐标区的 PositionTightInset 属性值。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)

Copy of the line plot displayed in a larger figure. The copy is tightly cropped around the axes to include the tick labels, the x-axis label, and the plot title. The background color of the larger figure is darker than the background color of the original figure.

调用 tiledlayout 函数以创建一个 2×1 分块图布局。调用 nexttile 函数以创建坐标区对象 ax1ax2。在每个坐标区中绘制一个线条。

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

Two vertically stacked line plots in a figure. The upper plot displays a blue line, and the lower plot displays a red line. Both plots display x-axis and y-axis tick labels.

捕获下坐标区的内容。getframe 捕获绘图的内部区域和边框。它并不捕获延伸到绘图轮廓外部的刻度值或标签。

F = getframe(ax2);

使用 imshow 显示捕获的图像数据。

figure
imshow(F.cdata)

Copy of the lower plot, which contains the border around the plot and the tick marks but not the tick labels

通过循环使用 getframe 记录 peaks 函数振荡的帧。预分配一个数组以存储影片帧。

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] 形式的四元素向量(以像素为单位)。leftbottom 元素定义矩形左下角的位置。该位置相对于指定为 getframe 的第一个输入参量的图窗或坐标区。widthheight 元素定义矩形的维度。

指定完全包含在图窗窗口中的矩形。

注意

在以后的版本中,rect 参量将不再捕获图窗工具栏、菜单栏或图窗周围的边框。您仍可以定义要捕获的图窗的子区域,但工具栏、菜单栏和边框将不包括在内。您也可以使用 exportapp 函数来捕获工具栏和菜单栏,但不捕获边框。

输出参量

全部折叠

影片帧,以包含下列两个字段的结构体形式返回:

  • cdata - 存储为 uint8 值数组的图像数据。图像数据数组的大小取决于您的屏幕分辨率。

  • colormap - 颜色图。在真彩色系统中,此字段为空。

注意

以下是有关 cdata 的大小的一些重要注意事项:

  • 如果您查询 getframe 捕获的区域(图窗、坐标区或由 rect 指定的区域)的大小,则以像素为单位的大小可能与 cdata 中的元素数不匹配。这种差异是因为 cdata 中的元素数取决于您的屏幕分辨率(以及操作系统设置),而 MATLAB® 中的像素数可能不对应于屏幕上的实际像素数。

  • 从 R2015b 开始,如果您使用高分辨率系统,则 cdata 的大小可能大于在以前版本中或在其他系统上的大小。

局限性

  • MATLAB Online™Web Apps (MATLAB Compiler) 中,getframe 不支持以下功能:

    • 捕获使用 uifigure 函数创建的图窗的内容或图窗中的任何坐标区。

    • 捕获使用 App 设计工具创建的 App 的内容或 App 中的任何坐标区。

详细信息

全部折叠

像素

以像素为单位的距离不依赖 Windows®Macintosh 系统上的系统分辨率:

  • 在 Windows 系统上,一个像素是 1/96 英寸。

  • Macintosh 系统上,一个像素是 1/72 英寸。

在 Linux® 系统上,一个像素的大小由系统分辨率确定。

提示

  • 为了在使用 getframe 值获得最快的性能,请确保图窗在屏幕上可见。如果图窗不可见,getframe 仍可捕获该图窗,但性能可能会减慢。

  • 为了更好地控制图像数据的分辨率,请改用 print 函数。带有 print 的 cdata 输出参量返回图像数据。resolution 输入参量控制图像的分辨率。

  • 要确保捕获显示在三维绘图旁边的颜色栏和图例,请在调用 getframe 时指定 fig 参量。

版本历史记录

在 R2006a 之前推出

全部展开