【发布时间】:2011-05-07 11:05:11
【问题描述】:
除了使用getframe 和saveas 将图形的内容保存到光栅图像以供进一步处理之外,还有其他方法吗?
方法一:getframe
h = figure('visible', 'off');
a = axes('parent', h);
% render using `scatter3()` or other plot function.
content = frame2im(getframe(h));
这有一个严重的缺点,即在对getframe() 的调用中显示图形以执行屏幕捕获,并且在循环中执行此类渲染时会出现问题(即在每次迭代时将content 保存为视频帧) .
方法二:saveas
h = figure('visible', 'off');
a = axes('parent', h);
% render using `scatter3()` or other plot function.
saveas(h, '/path/to/file.png');
content = imread(/path/to/file.png');
这种方法具有写入磁盘的严重缺点,这在多线程应用程序中存在问题,并且比直接渲染到内存要慢。由于saveas() 显然会在调用 PNG 编码器之前渲染到内存中,所以我想要的是可能的,但我在 MATLAB 文档中找不到任何只执行渲染部分的函数。
问题:
您知道将任意axes 内容渲染为光栅图像的另一种方法吗?
【问题讨论】:
-
我也遇到了类似的问题,我也很好奇 MathWorks 的人为什么会这样实现 getframe()。我认为这完全是疯了。另外,您为什么要关心线程(除非您正在运行多个 matlab 进程)?你甚至可以用 matlab 生成线程吗?
-
我运行parallel processing toolbox。我也遇到了全局状态更改的问题,因为计算在 UI 的单独线程中运行。例如。在 MATLAB 中打开文件浏览器并导航到另一个目录会更改进程的当前目录。
-
MathWorks 人员的运作理念是人们想要简单的界面,而不是完全控制。有时,这会使操作“对于简单的情况很容易,而对于困难的情况则不可能”。
标签: image matlab video screen-capture off-screen