我正在编写一个使用Matlab和Java Robot类(从Matlab调用)的自动UI测试套件。基本控制流程是这个循环:
我需要快速且一致的时序来完成这些步骤(理想情况下,步骤1-3每200ms发生一次)。步骤2和3很好,但截图太慢,不一致和机器相关(我的笔记本电脑需要200-500毫秒的屏幕截图和我的桌面更快,但仍远低于我的理想)。 是否有任何Matlab / Simulink软件包可以更快速,更一致地截取屏幕截图?
我已经考虑过Simulink实时Windows目标,但我无法弄清楚在simulink中截取屏幕截图是否是一种有效的输入形式(这看起来有点过分)。 我还研究了图像采集工具箱,以便使用它来拍摄屏幕截图,但不清楚它是否提供了这种功能(它主要处理硬件图像捕获设备)。 这是我用于计时目的的截图代码:
import java.io.*;
import java.awt.*;
robot = Robot;
tool = Toolkit.getDefaultToolkit();
for n = 1:100
tic
img = robot.createScreenCapture(Rectangle(tool.getScreenSize()));
pic = java_img2mat(img);
screen = rgb2gray(pic);
screen = screen(1:end-100,:);
t(n) = toc;
end
用于将java图像转换为Matlab可用形式的函数:
function image = java_img2mat(javaimg)
import java.io.*;
import java.awt.*;
H = javaimg.getHeight;
W = javaimg.getWidth;
% repackage as a 3D array (MATLAB image format)
image = uint8(zeros([H,W,3]));
pixelsData = uint8(javaimg.getData.getPixels(0,0,W,H,[]));
for i = 1 : H
base = (i-1)*W*3+1;
image(i,1:W,:) = deal(reshape(pixelsData(base:(base+3*W-1)),3,W)');
end
end
答案 0 :(得分:1)
使用分析器检查软件中的延迟位置,并尝试在以下几点优化代码:
http://www.mathworks.se/help/techdoc/matlab_env/f9-17018.html
http://www.mathworks.se/help/techdoc/ref/profile.html
使用DPC延迟检查程序检查您是否达到系统限制 - 这样您就可以测试运行的后台服务或在某种程度上比较图形硬件:
答案 1 :(得分:0)
不确定这些年后是否有人仍在关心,但是这个人把它缩小了here。
在我的机器上(大约10年前)需要花费80毫秒才能生成屏幕截图并将其转换为MATLAB友好格式。