2012-03-22 34 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友好的格式。