Matlab_getframe 捕获坐标轴或图形作为影片帧

F = getframe;

F = getframe(ax) 坐标轴对象;

F = getframe(fig) 图形对象;

F = getframe(__,rect) 捕获rect定义的矩形区域 ,  rect  [left bottom width height]

plot(rand(5));
drawnow
ax = gca;
ax.Units = 'pixels'; %将坐标轴单位更改为像素,以便于确定矩形截取区域。原坐标轴对象起始点为(0,0)
pos = ax.Position


marg = 30;
rect = [-marg,-marg,pos(3)+2*marg,pos(4)+2*marg];
% ti =ax.TightInset; 当涵盖坐标轴即title时,可以精确返回边距
% rect=[-ti(1),-ti(2),pos(3)+ti(1)+ti(3),pos(4)+ti(2)+ti(3)];
F = getframe(gca,rect); %捕获指定矩形区域,返回一个结构体
ax.Units = 'normalized';

figure;
imshow(F.cdata)

 

 

又出现了新的错误以 1.下是有关getframe函数的帮助: getframe 捕获坐标区图窗作为影片全页折叠 语法 F = getframe F = getframe(ax) F = getframe(fig) F = getframe(___,rect) 说明 示例 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([0 1; 1 2]) 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([0 1; 1 2]) 将坐标区单位更改为像素并返回当前坐标区位置。位置向量的第三和第四个元素指定坐标区宽度和高度(以像素为单位)。 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([0 1; 1 2]) xlabel('x values') title('Plot of Two Lines') 将坐标区单位更改为像素并存储坐标区的 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) 捕获特定坐标区 调用 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) 记录并播放影片 通过循环使用 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) 输入参数 全部折叠 ax — 要捕获的坐标区 Axes 对象 | GeographicAxes 对象 要捕获的坐标区,指定为 Axes 对象 GeographicAxes 对象。如果您要捕获并非当前坐标区的坐标区,请使用此选项。 getframe 捕获包围坐标区轮廓的最小矩形中的内容。如果您要捕获所有刻度值和标签,则改用 fig 输入参量。 示例: F = getframe(ax); fig — 要捕获的图窗 图窗对象 要捕获的图窗,指定为 Figure 对象。 rect — 要捕获的矩形区域 [left bottom width height] 形式的四元素向量 要捕获的矩形区域,指定为 [left bottom width height] 形式的四元素向量(以像素为单位)。left 和 bottom 元素定义矩形左下角的位置。该位置相对于指定为 getframe 的第一个输入参量的图窗坐标区。width 和 height 元素定义矩形的维度。 指定完全包含在图窗窗口中的矩形。 注意 在以后的版本中,rect 参量将不再捕获图窗工具栏、菜单栏图窗周围的边框。您仍可以定义要捕获的图窗的子区域,但工具栏、菜单栏和边框将不包括在内。您也可以使用 exportapp 函数来捕获工具栏和菜单栏,但不捕获边框。 输出参量 全部折叠 F — 影片 结构体 影片,以包含下列两个字段的结构体形式返回: 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 之前推出 全部折叠 R2023b: 在以后的版本中将不支持捕获图窗工具栏、菜单栏边框 在以后的版本中,getframe 函数将不再支持使用 rect 参量捕获图窗工具栏、菜单栏图窗周围的边框。您仍可以定义要捕获的图窗的子区域,但工具栏、菜单栏和边框将不包括在内。 您也可以使用 exportapp 函数来捕获工具栏和菜单栏,但不捕获边框。 在 R2022b 中已声明此变化。在 R2023b 中,当您指定包含工具栏、菜单栏图窗边框的矩形区域时,getframe 函数会发出警告。 2.以下是错误信息: 此类型的变量不支持使用点进行索引。 出错 alternateGetframe 出错 getframe (第 68 行) x = alternateGetframe(parentFig, offsetRect, scaledOffsetRect, includeDecorations, true, h, offsetRectSpecified); 出错 test3 (第 100 行) frame = getframe(hFig); % 捕获整个图形窗口
最新发布
07-14
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值