- PR -

PictureBoxで画像を連続表示

1
投稿者投稿内容
あび
ベテラン
会議室デビュー日: 2004/07/29
投稿数: 59
投稿日時: 2004-09-13 16:33
VB.NETで、PictureBoxに複数画像を連続表示させて、アニメーションのように見せたいと考えています。
画像は、jpegのファイルです。
連続表示させている途中で、次の表示までに少し時間がかかることがあります。
長時間という訳ではありませんが、解決できるものならば、全てのファイルを同じ処理速度で(次から次へと)表示させたいと思っています。

プログラムは以下のような感じです。問題点があるようでしたら、ご指摘下さい。
----------------------------------
For Pos=0 to Num
With picturebox
If .Image Is Nothing = False Then
.Image.Dispose()
.Image = Nothing
End If
.Image = Image.FromFile(mFiles(Pos).FullName)
End With
Next
----------------------------------



一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-09-13 17:25
ループで回しているようですが、アニメーションの速度の制御はできなくても良いんですか。
ループで回すことにより「最高速」で次のコマをを表示しようとしているからこそ、他の部分で負荷が発生した場合に最高速との差が気になるとか。
タイマーを使って「ある程度」の速度にしたらどうなりますか。

あるいはPictureBoxの内部での処理のせいということはありませんか?
GraphicsのDrawImage()を使ってみてはどうでしょうか。
PictureBoxでも内部ではDrawImage()を使っているのかもしれませんが。

あと、Image.FromFile()は1コマ表示するごとに実行するのではなく、画像データは全て最初にメモリ上に読み込んでおいたらどうです?
ファイルIOが影響しているのかも。
それとも全てメモリに読み込めない程大きかったり数が多かったりするのかな・・・

[ メッセージ編集済み 編集者: 一郎 編集日時 2004-09-13 17:27 ]
あび
ベテラン
会議室デビュー日: 2004/07/29
投稿数: 59
投稿日時: 2004-09-13 17:44
引用:

一郎さんの書き込み (2004-09-13 17:25) より:
ループで回しているようですが、アニメーションの速度の制御はできなくても良いんですか。
ループで回すことにより「最高速」で次のコマをを表示しようとしているからこそ、他の部分で負荷が発生した場合に最高速との差が気になるとか。
タイマーを使って「ある程度」の速度にしたらどうなりますか。

あるいはPictureBoxの内部での処理のせいということはありませんか?
GraphicsのDrawImage()を使ってみてはどうでしょうか。
PictureBoxでも内部ではDrawImage()を使っているのかもしれませんが。

あと、Image.FromFile()は1コマ表示するごとに実行するのではなく、画像データは全て最初にメモリ上に読み込んでおいたらどうです?
ファイルIOが影響しているのかも。
それとも全てメモリに読み込めない程大きかったり数が多かったりするのかな・・・

[ メッセージ編集済み 編集者: 一郎 編集日時 2004-09-13 17:27 ]



一郎さん、色々なアドバイスありがとうございます。

最初は、Timerによる制御をしていたのですが、”最速”にするとどうも”止まり”が気になって、その制御をはずして、単純な処理で速度のチェックをしてみた次第です。

GraphicsのDrawImageは実は挑戦したのですが、挫折してしまいました。(挫折の原因は、私のマニュアルを読む根性の無さにあります。)
もう一度、やってみます。

ファイルのIOは気がつきませんでした。メモリ上問題なければ、やってみる価値はあるかような気がします。結果は、後ほどお知らせします。
あび
ベテラン
会議室デビュー日: 2004/07/29
投稿数: 59
投稿日時: 2004-09-14 09:09
>画像データは全て最初にメモリ上に読み込んでおいたらどうです?
>ファイルIOが影響しているのかも。

以下のように、やってみたのですが、全体的に表示に時間がかかるようになってしまいました。表示する毎にFromFileでImageを作成した方が、良いみたいです。

----------------------------
For Pos=0 to Num
 ImageData(pos)=Image.FromFile(mFiles(Pos).FullName)
Next
.........
For Pos=0 to Num
With picturebox
If .Image Is Nothing = False Then
.Image.Dispose()
.Image = Nothing
End If
.Image = ImageData(Pos)
End With
Next
1

スキルアップ/キャリアアップ(JOB@IT)