接続された Web カメラからビットマップを取得し、時計回りに 90、180、または 270 度回転させてウィンドウに表示するコードを書いています。
ビットマップは、もともとデバイスに依存しないビットマップとして提供されています。ソース (ビットマップ) から宛先 (画面上で回転) に移動できる最も効率的な一連の呼び出し (メモリのコピーに関して) は何ですか?
C++ と Win32 API を使用しています。
ビットマップがメモリ内でどのように表現されるかを理解する必要があります。それは行単位です。上下逆にするかどうかを選択できます。たとえば、左上の位置から始めて、ビットマップの幅 (cx) に達するまで、最初の行 (x=0..cx、y=0) ですべてのピクセルを取得します。次に、ストライド (いくつかのパディング バイト) があり、ピクセルの次の行 (x=0..cx、y=1) が開始されます。
変換は単純であることに注意してください。90 度と 270 度の場合、各ピクセルを個別にコピーする必要があります。memcpy
180 度の場合、各行を使用してビットマップを「反転」できます。BitBlt
そのために負の高さで使用することもできます。
CreateDIBSection
ビットへのアクセスは、または を介して受け取ったポインタを使用して直接提供されますGetDIBits
。GdiFlush
これらのビットマップをメモリ DC として描画した場合は、ビットを使用する前に呼び出すことを忘れないでください。