私は、MatlabとJava Robotクラス(Matlabから呼び出される)を使用して、自動UIテストスイートを作成しています。基本的な制御フローは、このループです:Matlabの リアルタイム処理のための高速スクリーンキャプチャ
を使用して、いくつかのキーを押してください
- はロボット
- を使用して直接Xアプリケーションのスクリーンショットを撮る私が速い必要これらのステップ(ステップ1〜3が理想的には200ms毎に発生する)のための一貫したタイミングを提供する。ステップ2と3はうまくいきますが、スクリーンショットが遅すぎ、不一致で、マシンに依存しています(私のラップトップは画面キャプチャに200〜500msかかるが、デスクトップは速くても私の理想の下にはまだ遠い)。 スクリーンショットのタイミングをより迅速かつ一貫性のあるMatlab/Simulinkパッケージがありますか?
私はSimulink Real-Time 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
とMATLABの使用可能な形式にJavaの画像を変換するために使用される機能::で確認する
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
それを投稿しても、応答はありません。( – zergylord
Mathworksのテクニカルサポート、[email protected]にメールを送ることができます。 – KAE