2008年11月13日

DrawImageとBitBlt速度比較(適当)

適当ですが、速度比較をしました。

条件

  • CPU: AMD Athlon 64 X2 3800+(2.0GHz)
  • メモリ:2GB
  • Paintイベント内で描画処理を1000回ループして、その時間を計測する
  • 転送する画像は320x240 32bit ビットマップ
  • DrawImageはフォームへ直接描画
  • BitBltはフォームへ転送できなかったのでPictureBoxへ転送
    • BitBlt(A)は、デバイスコンテキストの取得から解放までの処理
    • BitBlt(B)は、BitBltによる転送処理のみ

結果

~処理 時間
DrawImage 1500ms
BitBlt(A) 2480ms
BitBlt(B) 280ms

デバイスコンテキストを描画の度に取得・解放していると、DrawImageを使うよりもさらに遅い。ということは、デバイスコンテキストは常に保持しておく必要がある。しかし、Graphicsオブジェクトからデバイスコンテキストを取得すると、デバイスコンテキストを解放するまでそのGraphicsオブジェクトの機能は一切使えなくなってしまう(そういう仕様。GDIとGDI+を混在させないようにするためか?)。

つまり、描画関連は全てWin32APIでまかなうことになる。.NET Frameworkだとビットマップの描画に変換行列が使えるので回転拡大縮小がとても楽なんだが、それが使えなくなるのはちょっと惜しい。まあDirectX使わないでやる以上、そこまで機能を求めることもないか。



manayamist at 23:18│Comments(1)TrackBack(0)プログラム 

トラックバックURL

この記事へのコメント

1. Posted by ASA   2013年08月24日 00:16
面白い記事を発見
ttp://bm98.yaneu.com/intensive/diw1.html
がGoogleで最初に引っかかったのですが、大量の文字に圧倒されこのサイトに……。

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔