3

現在、MATLAB の writeVideo 関数を使用してビデオを作成しようとしています。スライダー、いくつかのチェックボックス、および単一の軸 (axes1 としてタグ付け) を含む GUIDE を使用して GUI を作成しました。スライダーを動かすと、軸はスライダーの値に応じて変化する特定の形状をプロットします。

私がやろうとしているのは、プレゼンテーションで機能を示すために使用されている GUI のビデオを録画することです。ただし、(writeVideo を使用して作成した後に) ビデオを再生すると、スライダーの値が移動し、チェックボックスが正しくチェックされていることが示されますが、プロットは変更されません (つまり、元の形状のみが表示されます)。これは更新エラーのようですが、私が試したものはすべて機能しませんでした (更新、 drawow など)。

なぜこれが起こっているのですか?以下は、私が実装しようとしているコードです。

vidObj = VideoWriter('test.avi','Motion JPEG AVI');
open(vidObj);
flag = 0;
if flag<12 %movie will be 12 frames long
    flag = flag+1;
    if slider<1  
        plot something...
    elseif slider>=1 && slider<2
        plot something else...
    etc...
    elseif slider<=5
        plot something else...
    end

    hFigure = findobj('Name','gui');
    currFrame = getframe(hFigure);
    writeVideo(vidObj,currFrame);

    clear hfigure currFrame image;
else
    fprintf('done\n')
    close(vidObj);   
end

前述のように、implay を使用して test.avi ファイルを再生できますが、プロットは更新されません。

前もって感謝します

注: MATLAB R2012b を使用しています

編集:

以下は、私が最終的にビデオを作成した方法です。これは、上記の問題と同様の問題に直面している人を助けるかもしれません.

私は基本的に getframe の使用をあきらめ、1) スクリーンショットを取得し、2) スクリーンショットをムービーに変換することにしました。スクリーンショットを取得するために、まずプログラムを実行し、次にコマンド ウィンドウで、Java ツールキットを使用して次のコードを呼び出しました。

i = 1;
while true
    robo = java.awt.Robot;
    t = java.awt.Toolkit.getDefaultToolkit();

    %# Set screen size
    rectangle = java.awt.Rectangle(0,0,1000,640);

    %# Get the capture
    image = robo.createScreenCapture(rectangle);

    %# Save it to file
    filehandle = java.io.File(sprintf('capture%d.jpg', i));
    javax.imageio.ImageIO.write(image,'jpg',filehandle);

    pause(.4) %# Wait for 0.4 seconds
    i = i + 1;
end

その後、これはバックグラウンドで継続的に実行され、画面のスナップショットを取得して現在のディレクトリに保存しました。実行を停止するには、Ctrl C を使用します。スクリーン ショットを取得したら、次のコードを使用してムービーを作成しました。

vidObj = VideoWriter('test.avi','Motion JPEG AVI');
open(vidObj);
for i=7:87 %these are the frames I wanted in my movie
    x = num2str(i);
    im = horzcat('capture',x);
    im1 = horzcat(im,'.jpg')
    imdata = imread(im1);
    writeVideo(vidObj,imdata);
end
close(vidObj); 
4

2 に答える 2