【发布时间】:2012-04-06 14:44:18
【问题描述】:
我正在使用 Matlab 和 Java Robot 类(从 Matlab 调用)编写一个自动化 UI 测试套件。基本的控制流程是这个循环:
- 使用 Robot 截取 Direct X 应用程序的屏幕截图
- 使用 Matlab 进行一些处理
- 使用 Robot 以编程方式按下某些键
我需要对这些步骤进行快速且一致的计时(步骤 1-3 最好每 200 毫秒发生一次)。第 2 步和第 3 步很好,但是屏幕截图太慢、不一致且依赖于机器(我的笔记本电脑需要 200-500 毫秒的屏幕捕获时间,而我的桌面速度更快,但仍远低于我的理想状态)。 是否有任何 Matlab/Simulink 软件包可以让屏幕截图更加快速和一致?
我考虑过 Simulink Real-Time Windows Target,但我不知道在 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
【问题讨论】:
-
如果这个问题存在很长时间,您可以在此处发布 Simulink 相关部分 (mathworks.com/matlabcentral/answers)。请务必使用“Simulink”标记您的问题,以让专家(不幸的是,不是我)看到它。
-
也发到那里了,两个地方都没有回复:(
-
您可以发送电子邮件至 Mathworks 技术支持,support@mathworks.com。我总是对他们提供的帮助感到惊讶。祝你好运。
标签: matlab real-time screenshot simulink