我用matlab编写了一个相当大的数据采集程序,该程序在一个非常紧凑的时序安排下接收输入数据,并在GUI上实时绘制它。我的问题是,我需要一种方式,为程序的用户查看GUI通过网络,以监测他们的数据远程。我的解决方案是每隔5秒左右拍摄一张GUI图形快照,并将该图像保存在web服务器上。
然而,这导致了两个不可接受的问题:
有办法解决这些问题吗?
EDIT:***对任何感兴趣的人来说,我找到的最好的解决方案就是使用一个名为极小的外部工具包。
发布于 2012-11-21 12:51:33
对于任何在未来与此做斗争的人来说,我在Windows平台上找到的解决方案是一个名为极小的小程序,它允许一个人使用系统命令轻松地捕获和保存屏幕截图。
需要有图形的底层Windows句柄,它可以使用超级用户YairM.Altman编写的称为gethwnd()
的可公开使用的matlab函数访问。
然后,您可以获取一个非常快速、高分辨率的图形屏幕截图,并将其保存到磁盘中,如下所示:
winHandle = gethwnd(matlabFigHandle);
cmndstr = sprintf('%s','MiniCap.exe -save ','"',snapShotFileNamePath,'"',...
' -compress 9', ' -capturehwnd ', num2str(winHandle),' -exit');
system(cmndstr);
发布于 2011-07-25 07:46:47
文件格式有很大的不同。这是一个样本散点图
n = 1e4;
hfig = figure;
hax = plot(1:n, rand(1, n), '+');
...and一些保存到不同格式的时间。
tic; print(hfig, 'test.bmp', '-dbmp'); toc %4.1s
tic; print(hfig, 'test.bmp', '-dbmp256'); toc %2.0s
tic; print(hfig, 'test.png', '-dpng'); toc %1.9s
tic; print(hfig, 'test.tiff', '-dtiff'); toc %0.45s
tic; print(hfig, 'test.jpg', '-djpeg'); toc %0.44s
tic; print(hfig, 'test.wmf', '-dmeta'); toc %0.42s
tiff
、jpeg
和wmf
是第一个联合起来的,尽管tiff文件很大,jpeg质量很差,如果你不在Windows平台上的话,wmf就会有问题。
对于光栅格式,分辨率也会影响时间。
tic; print(hfig, 'test600.png', '-dpng', '-r600'); toc %4.2s
tic; print(hfig, 'test72.png', '-dpng', '-r72'); toc %0.31s
另一件要加快打印的事情是删除你不需要的部分情节。透明度在计算上是不确定的,传说也是如此。采样你的数据,而不是标出所有这一切也将节省时间。
发布于 2011-07-25 08:00:41
你的解决方案必须是纯Matlab吗?使用平台工具包获取包含GUI的窗口的快照,并将其写入磁盘。这是非常快,因为它将在一个单独的线程应该处理您的线程问题。
https://stackoverflow.com/questions/6817897
复制