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

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

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

Re[1]: PictureBoxに高速で画像を表示するコツ


(過去ログ 159 を表示中)

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

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


引用返信 編集キー/
■92345 / inTopicNo.2)  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回は画面表示が必要な世界です。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -