Contents



ちらつかないアニメーションの作り方を教えて下さい。

for j = 1:30
Z=imagesc(rand(100));
F(j) = getframe;
end
movie2avi(F,'test.avi','compression','none','FPS',30);

とかダメですか?ちらつく状況がよくわかりません。ダメだったらもう一度チャンスを下さい。
(Mのない世界) 2007-06-17 01:04:27


2つの画像(BMP)を読み込んで、一定時間交互に表示し続けさせるにはどのようにすればいいでしょうか?また、二つの画像の提示間隔(例えば、a.bmpが表示されてから何秒後にb.bmpを表示するか)とアニメーションの提示時間(交互に何秒間表示し続けさせるのか)を指定するにはどのようにすればいいでしょうか?

MATLABにはいくつか時刻取得方法が用意されていますが
精度にそれほどこだわらないのであればtic, tocを利用する
のが手っ取り早くてオススメです※。手軽にアニメーション
を行うには、画像をfigureに描き、drawnow()関数で
フラッシュを行い、指定時間だけ待ち、次の画像を表示という
方法で一応実現できます。

例:10秒の間0.5秒間隔でアニメーション
a = imread('a.bmp');
b = imread('b.bmp');
cont = 0; %フレームカウンター
figure;

tic;
while(toc<10) %10秒の間アニメーション
if toc > cont*0.5 %0.5秒間隔でフレームを更新
if mod(cont, 2) %カウンターが偶数の時はaの画像を表示
image(a);
else %奇数の場合はbの画像を表示
image(b);
end
drawnow() %確実に描画させる
cont = cont+1;
end
pause(0.05); %CPU使用率が上がるのが嫌な場合はpauseを入れる。(フレーム更新の精度はその分落ちる)
end

※画像の更新にmSecの時間精度を必要とする場合はMATLAB
の関数では実現出来ないのでネットで誰かが作った外部関数
を探しましょう。Windowsのマルチメディアタイマー等を
MATLABから利用できるものがあるはずです。例えば心理
実験でよく用いられるPsychophysics toolboxのGetSecs()
関数はmSecオーダーの精度を持っています。

-- (東方腐敗) 2008-12-30 19:42:25