我在 matlab 中编写了一个相当大的数据采集程序,它以非常紧凑的时间安排接收输入数据,并在 GUI 上实时绘制它。我的问题是我需要一种方法让程序用户通过网络查看 GUI 以远程监控他们的数据。我的解决方案是每 5 秒左右拍摄一次 GUI 图的快照,并将该图像托管在 Web 服务器上。
然而这会导致两个 Not Acceptable 问题:
打印功能实在是太慢了——每次保存大约需要 3-4 秒,而且程序在每次调用“打印”后都会落后于其他例程。
由于某种原因,打印功能导致 GUI 暂时变形,改变了某些组件的位置并复制了其他组件。它只持续一秒钟左右,但它仍然使我的解决方案不切实际。
有没有办法解决这两个问题?
编辑:*** 对于任何感兴趣的人,我发现的最佳解决方案是使用名为 Minicap 的外部工具包.
最佳答案
文件格式有很大的不同。这是一个示例散点图
n = 1e4;
hfig = figure;
hax = plot(1:n, rand(1, n), '+');
...以及保存为不同格式的一些时间安排。
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 质量很差,wmf 有问题,如果你不在 Windows 平台上。
对于光栅格式,分辨率也会影响时间。
tic; print(hfig, 'test600.png', '-dpng', '-r600'); toc %4.2s
tic; print(hfig, 'test72.png', '-dpng', '-r72'); toc %0.31s
另一个加快打印速度的方法是删除不需要的部分绘图。透明度是计算密集型的,图例也是如此。对数据进行采样而不是绘制所有数据也可以节省时间。
关于user-interface - 如何加速matlab 'print'函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6817897/