除了使用getframesaveas将图形内容保存到光栅图像以进行进一步处理之外,还有其他选择吗?

方法1:getframe

h = figure('visible', 'off');
a = axes('parent', h);

% render using `scatter3()` or other plot function.

content = frame2im(getframe(h));

这具有严重的缺点,即在调用getframe()时显示该图形以执行屏幕捕获,并且在循环中执行此类渲染时存在问题(即,在每次迭代时将content保存为视频帧)。

方法2: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内容呈现到光栅图像的另一种方法?

最佳答案

如果使用avifile创建一个avi文件,然后使用addframe向其中添加框架,则MATLAB不会像getframe那样打开额外的可见图形。

avi = avifile('/path/to/output');
figure_handle = figure('visible', 'off');

% ...
for something = 1:1000
    cla
    % (draw stuff...)
    avi = addframe(avi, figure_handle);
end

07-28 02:44