バージョン R2007a を使用しています。
まず少し背景を説明します。リアルタイムで取得したデータから散布図を蓄積するツールを作成しています。ポイントの数が十分に大きくなると、グラフィックスの更新が受信データに追いつかないため、set toを使用'painters'
し、単純に a を実行してプロット ポイントの位置を更新します。これは非常にうまく機能します。'EraseMode'
'none'
set(obj,'xdata',...,'ydata',...)
ちなみに、いいトリックを発見しました。ダブル バッファリングをオンにすることで、MATLAB は常にメモリ内に画像のコピーを保持するため、ウィンドウが非表示または最小化されている場合でも画像にポイントが蓄積されます。
次に、各画像をキャプチャしてムービーを作成したいと思います。getframe()
、addframe()
、および文書化されていないを使用したさまざまなソリューションを見てきましたhardcopy()
。これらはすべて図を再描画し、古いポイントは失われますが、これは実際には後処理で回避できるものです。私の問題は、これらの関数がデータ取得速度に対して遅すぎることです。tic/toc を使うと、
tic, getframe(h); toc - 0.13 sec
tic, addframe(h); toc - 0.15 sec
tic, hardcopy(h,'-Dpainters','r0'); toc - 0.07 sec
set toでhardcopy()
何か違うことがわかりますが、その出力を利用する方法を見つけることができたとしても、それでも遅すぎます。'renderer'
'painters'
しかし、ダブル バッファリングをオンにすると、イメージは既にバッキング ストア/バック バッファに置かれています。そのコピーを作成すると、非常に高速になります。バッキング ストアへのポインタを取得し、そのコピーを作成する方法を見つけたハッカーはいますか?
ありがとう