|
分類:[.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に高速で画像を表示する上で 処理を軽くするためのコツなどございましたら お教え願えないでしょうか?
|