5

ユーザー コントロールのペイント ハンドラーで、定義済みの Bitmap オブジェクトのコレクションを繰り返し処理し、クライアント領域に描画します。

C# バージョン:

private void Control_Paint(object sender, PaintEventArgs e) {
    Graphics g = e.Graphics;
    foreach (BitmapObj bmpObj in _bitmapObjCollection) {
        g.DrawImageUnscaled(bmpObj.Bitmap, bmpObj.Location);
    }
}

VB.NET バージョン:

Private Sub Control_Paint(ByVal sender As Object, ByVal e As PaintEventArgs) Handles MyBase.Paint
    Dim g As Graphics = e.Graphics

    For Each bmpObj As BitmapObj In _bitmapObjCollection
        g.DrawImageUnscaled(bmpObj.Bitmap, bmpObj.Location)
    Next
End Sub

コードは問題なく動作しますが、12 個ほどのオブジェクトがコレクションに追加されると、動きが鈍くなり始めます。私の質問は: これをスピードアップする方法はありますか? Win32 の bitblt 関数を使用して DrawImageUnscaled を置き換えることはできますか? もしそうなら、どのように?

ありがとう!

注: BitBlt の使用に関するグーグル検索では、これまでのところ画面キャプチャのサンプルしか得られませんでした...

4

1 に答える 1

6

手遅れですが、おそらく誰かがまだ解決策を必要としています。

OpenTK で実行される同様の GDI+ 構文を持つ小さなライブラリ GLGDI+ を作成しました: http://code.google.com/p/glgdiplus/

安定性についてはわかりません。DrawString に問題があります (OpenTK の TextPrint の問題)。ただし、ユーティリティ (私の場合はレベル エディターなど) のパフォーマンスを向上させる必要がある場合は、解決策になる可能性があります。

于 2010-09-13T12:23:53.863 に答える