C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

PictureBoxに高速で画像を表示するコツ /ママ (19/09/11(Wed) 11:46) #92338
Re[1]: PictureBoxに高速で画像を表示するコツ /とっちゃん (19/09/11(Wed) 14:00) #92345


親記事 / ▼[ 92345 ]
■92338 / 親階層)  PictureBoxに高速で画像を表示するコツ
□投稿者/ ママ (1回)-(2019/09/11(Wed) 11:46:27)

分類:[.NET 全般] 

複数のPictureBoxに高速(30〜60 fps)で画像を表示するプログラムを作成しています。


画像と元となるデータを動的にバックグラウンドで生成し、
BeginInvokeで

PictureBox1.Image = bmp1
のようにしてデータを渡しています。

ここで気になるのは

ウインドウサイズを変更してもイメージもリサイズされるように


PictureBox1.SizeMode = PictureBoxSizeMode.Zoom

の設定で行っています。

そのため、GUIスレッドで画像のピクセル補間が行われるため、
高速表示した時にPictureBoxによって画像が表示されるタイミングが違ったりしてしまいます。

そのため、バックグラウンドプロセスでピクセル補間も行った上で
GUIスレッドに渡す必要があります。


そのプログラムを自前で書いており以下のようになりました。


Dim Width3 As Integer
Dim Height3 As Integer


' イメージの上下に余白ができる場合
If Width2 / Height2 >= PBox.ClientSize.Width / PBox.ClientSize.Height Then

Width3 = PBox.ClientSize.Width
Height3 = CInt(Width3 / Width2 * Height2)

' イメージの左右に余白ができる場合
Else

Height3 = PBox.ClientSize.Height
Width3 = CInt(Height3 / Height2 * Width2)

End If


Dim canvas As New Bitmap(Width3, Height3)

ここで一つ気になるのは、
PictureBox1.SizeMode = PictureBoxSizeMode.Zoom
と設定してあったとして
PictureBoxのサイズに合致するイメージが渡された時に
補間処理は全く行われていないのでしょうか?

スケール比が1として計算されていたりしませんか?


あと、PictureBoxに高速で画像を表示する上で
処理を軽くするためのコツなどございましたら
お教え願えないでしょうか?


[ □ Tree ] 返信 編集キー/

▲[ 92338 ] / 返信無し
■92345 / 1階層)  Re[1]: PictureBoxに高速で画像を表示するコツ
□投稿者/ とっちゃん (635回)-(2019/09/11(Wed) 14:00:00)
No92338 (ママ さん) に返信
> 複数のPictureBoxに高速(30〜60 fps)で画像を表示するプログラムを作成しています。
>
30〜60fps というと、それなり以上のリアルタイム性能が求められると思いますが、
PictureBox ではそこまで高速なレンダリングは難しい気がします(リサイズしない場合でも)。

描画速度とか確認してみましたか?

60fpsというと、0.016秒(16ミリ秒)程度に1回は画面表示が必要な世界です。
30fpsでも、0.033秒程度に1回は画面表示が必要な世界です。

[ 親 92338 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -