我寫利用Matlab和Java Robot類(從MATLAB調用)的自動化UI測試套件。基本控制流程是這樣的循環:快速屏幕捕捉的實時處理
- 使用機器人
- 採取的Direct X應用程序的截圖用Matlab
- 做一些處理程序使用機器人
我需要快速按下某些鍵併爲這些步驟提供一致的時間安排(步驟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
如果這個問題坐很長一段時間,你可能會在這裏發表Simulink的相關零件(http://www.mathworks.com/matlabcentral/answers/)。一定要用'Simulink'來標記你的問題,讓專家(不幸的是,我不能)看到它。 – KAE 2012-03-26 13:38:12
有發佈它爲好,沒有迴應任何地方:( – zergylord 2012-03-29 02:50:59
你可以通過電子郵件發送Mathworks公司的技術支持,[email protected]。我在他們多少幫助,提供總是感到驚訝。祝你好運。 – KAE 2012-03-30 13:18:50