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

わんくま同盟

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

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


(過去ログ 159 を表示中)
■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に高速で画像を表示する上で
処理を軽くするためのコツなどございましたら
お教え願えないでしょうか?


返信 編集キー/


管理者用

- Child Tree -