VB2008での AutoRedraw(続)
前の簡略な方法がダメなので,引き続き調査を行うと,『描画をPaintイベントプロシージャに書く』というのがありました.Microsoftの公式ページにもそんなことが書いてあります.
しかし...丸2,3個とかならいざ知らず,描画に数分かかるような膨大なグラフィック描画を Paint プロシージャに書いてもうまくいくとは到底思えません.
そのうちに,『描画を直接行わず,まず自前のグラフィックオブジェクトに描いておいて,それを描画領域に移す』というのが見つかりました.それらの記述を参考にして自分なりに考えてみたのが以下のコードです.
Dim BufferImage As New Bitmap(PictureWidth, PictureHeight)
Dim MyPicture As Graphics = Graphics.FromImage(BufferImage)
For I = 0 To PictureHeight
For II = 0 To PictureWidth
MyPicture.DrawEllipse(Pen, I, II, 1, 1)
PictureBox1.Image = BufferImage
Next
Next
結論から言うと,これでほぼ100%私の目的は達成できました.BufferImage に一回しか初期代入してないのに,その内容が更新されるのが謎ですが,とりあえず『オブジェクトってそんなものなのね』で納得することとします.
あと,For Next ルーチンが終了した後もちゃんと描画内容が保持されているのですが,これも謎と言えば謎です.
まあとりあえず,これで前に書いた三つの問題点はすべて解消できました.解決まで2カ月ほどかかりましたが,これで前に進むことができます.ふぅ.
2015/02/25 12:02:30