2012-03-22 36 views
2

我写利用Matlab和Java Robot类(从MATLAB调用)的自动化UI测试套件。基本控制流程是这样的循环:快速屏幕捕捉的实时处理

  1. 使用机器人
  2. 采取的Direct X应用程序的截图用Matlab
  3. 做一些处理程序使用机器人

我需要快速按下某些键并为这些步骤提供一致的时间安排(步骤1-3理想情况下每200毫秒发生一次)。步骤2和步骤3都很好,但截图速度太慢,不一致且与机器相关(我的笔记本电脑需要200-500毫秒才能完成屏幕截图,而且桌面速度更快,但仍然远远低于我的理想)。 是否有任何Matlab/Simulink软件包可以实现更快速和一致的截图时间?

我已经考虑了Simulink的实时视窗目标,但我想不通,如果采取的截图是在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

如果这个问题坐很长一段时间,你可能会在这里发表Simulink的相关零件(http://www.mathworks.com/matlabcentral/answers/)。一定要用'Simulink'来标记你的问题,让专家(不幸的是,我不能)看到它。 – KAE 2012-03-26 13:38:12

+0

有发布它为好,没有回应任何地方:( – zergylord 2012-03-29 02:50:59

+0

你可以通过电子邮件发送Mathworks公司的技术支持,[email protected]。我在他们多少帮助,提供总是感到惊讶。祝你好运。 – KAE 2012-03-30 13:18:50

回答

0

如果没有把握这些年来,有人仍然在意,但这家伙缩小了它的范围here

在我的机器(这大约是10Y左右)需要80毫秒aorund生产的截图并将其转换为MATLAB友好的格式。