Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab:通过复制备份存储/备份缓冲区快速捕获图像?_Matlab_Graphics_Real Time_Screen Capture_Double Buffering - Fatal编程技术网

Matlab:通过复制备份存储/备份缓冲区快速捕获图像?

Matlab:通过复制备份存储/备份缓冲区快速捕获图像?,matlab,graphics,real-time,screen-capture,double-buffering,Matlab,Graphics,Real Time,Screen Capture,Double Buffering,我使用的是R2007a版本 首先是一个小背景:我正在创建一个工具,从实时采集的数据中积累散点图。当点数足够大时,图形刷新无法跟上传入数据,因此我使用'painters'将'EraseMode'设置为'none',只需执行设置(obj,'xdata',…,'ydata',…)即可更新打印点位置。这个很好用 顺便说一句,我发现了一个很好的技巧:通过启用双缓冲,MATLAB在内存中总是有图像的副本,因此即使窗口被隐藏或最小化,点也会在图像中累积 现在,我想捕捉每个图像来创建一部电影。我见过使用getf

我使用的是R2007a版本

首先是一个小背景:我正在创建一个工具,从实时采集的数据中积累散点图。当点数足够大时,图形刷新无法跟上传入数据,因此我使用
'painters'
'EraseMode'
设置为
'none'
,只需执行
设置(obj,'xdata',…,'ydata',…)
即可更新打印点位置。这个很好用

顺便说一句,我发现了一个很好的技巧:通过启用双缓冲,MATLAB在内存中总是有图像的副本,因此即使窗口被隐藏或最小化,点也会在图像中累积

现在,我想捕捉每个图像来创建一部电影。我见过使用
getframe()
addframe()
和未记录的
硬拷贝()的各种解决方案。这些都重新绘制了图形,旧的点丢失了,但这实际上是我可以在后处理中解决的问题。我的问题是这些函数对于数据采集速率来说太慢了。有了tic/toc,我发现

tic, getframe(h); toc - 0.13 sec
tic, addframe(h); toc - 0.15 sec
tic, hardcopy(h,'-Dpainters','r0'); toc - 0.07 sec
我看到
hardcopy()
'renderer'
设置为
'painters'
时做了一些不同的事情,但即使我能找到如何利用其输出,它仍然太慢

但如果启用双缓冲,则图像已经位于后备存储/后备缓冲区中。复制一份这样的文件会很快。有没有黑客能找到一个指向备份存储的指针并复制它


谢谢

为什么不将传入的实时数据存储在一个文件中,稍后播放(绘制每个帧)并制作一个视频,而不是尝试实时创建视频呢?此外,您可能会发现有趣的是,因为它有一种在使用OpenGL渲染器时直接访问图形像素的方法。我有一个类似的问题:你说的“打开双缓冲”是什么意思?看起来硬拷贝(和所有其他方法)重新渲染了图形。