3

こんばんは、

メモリバッファにいくつかの32ビット画像があり、デバイスコンテキストにすばやく「ブリット」したいと思っています。バッファは常に操作され、DCに繰り返しブリットする必要があるため、ここでは速度が問題になります。

バッファの色深度は32ビットであるため、すでにDIBで期待されるSetDIBits()形式になっています。ただし、SetDIBits()のビットマップターゲットを操作前にDCに選択することはできないため、これはかなり面倒です。したがって、DCのビットマップを常にスワップアウトし、SetDIBits()を呼び出し、ビットマップをDCにスワップバックしてから、DCをウィンドウのDCにブリットする必要があります。私には、これはCPUに大量のワークロードがあり、WindowsAPIの分岐が多すぎるように思えます。最適なパフォーマンスを得るには多すぎます。

画像の内容は絶えず変化するため、2D操作にデバイスコンテキストを使用する必要がない場合、またはテクスチャを表示する前にビデオメモリにテクスチャをアップロードする必要がない場合は、DirectXを使用することに興味があります。

私の質問は単純です(長い記事にもかかわらず)。メモリ内のピクセルバッファから画面に画像をブリットするための最速の方法は何でしょうか?DCのピクセルバッファへの直接アクセスは素晴らしいでしょうが、私はそれが起こらないことを知っています。

私の長い記事を読んでくれてありがとう。

4

1 に答える 1

2

アプリケーションが直接書き込むことができる DIB を作成するための API メソッドCreateDIBSectionがあります。これにより、ビットマップを継続的に更新できます (memcopy または直接書き込み)。

詳細については、MSDN の記事を参照してください。

ビットマップへのアクセスは同期する必要があります。これを行うには、GdiFlush 関数を呼び出します。

于 2011-01-18T09:13:54.800 に答える