2012-02-07 23 views
2

パッチからビデオをレンダリングしようとしています。ビデオは25fpsで、私のコードは画像に書き込む前に各パッチを画面に表示しています。私はパッチで '目に見える'、 'オフ'のオプションを試しましたが、これは映画の空白のフレームになります。パッチ機能を使ってファイルに書き込むことはできますが、画面には表示されませんか?ファイルに直接MATLABパッチを書き込むことはできますか

for k = 1:length(obj.shape) 
    fig = patch('Vertices', obj.shape(k).vertices',... 
    'Faces', obj.shape(k).faces', 'FaceColor', [0.8 0.5 0.2],... 
    'LineStyle', 'none', 'FaceLighting', 'phong', 'Visible', 'on'); 
    light('Position', [1 0 0], 'Style', 'infinite'); 
    View(180, 90); 
    f = getframe(gcf); 
    close(gcf); 
    imwrite(f.cdata, [directory '/frame_' int2str(k) '.jpg'], 'jpg'); 
end 

答えて

1

getframeが不可視で動作しないのは、実際の画面コンテンツがキャプチャされるためです。あなたの代わりにprintを使用して喜んでいる場合は、あなたが望むものを達成することができます

figure 
set(gcf, 'Visible', 'off') 
for ... 
    < draw your animation frame > 
    print('-r300', '-djpeg', '[directory '/frame_' int2str(k) '.jpg']) 
end 

欠点は、MATLABの印刷機構によって生成されたため、保存した画像は、正確に画面上のように見えないであろうということです。解像度を指定したり、「ページ」などに図形の位置とサイズを設定することで、外観を微調整することができます。

Btw。フレームごとに新しい図形を作成するのは良い考えではないでしょう1つを再利用し、その内容を上書きします。また、ビデオ、アニメーションGIFなどに後処理する場合は、PNGのようなロスレスなファイル形式を使用する方がよいでしょう。

+0

はいこれは、デフォルトでプロット軸を表示しないという利点が追加されたソリューションです。 – shaw2thefloor

2

問題は、(あなたが "編集getframeの"、ライン100-125を入力して、それを見ることができます)getframe() sets the figure to visibleということです。私はあなたの必要性を完全に理解していますが、あなたが求めていることをする簡単な方法が存在するかどうかはわかりません。

関連する問題