|
分類:[C++/CLI]
C++/CLI に限らないかもしれませんが、Bitmap の生データを扱う必要があったので、 以下のようなコードを書いてみました。
すると。。。Bitmap の領域をロックする際に、ImageLockMode::WriteOnly(書き込みしかしないので) と指定してみたところ、なんと、ロックしただけで、ロックした Bitmap のデータを黒一色に変換 されてしまいました。
ちなみに、ImageLockMode::ReadWrite と指定するとそんなことはおこりません。。。 MS のサイトを見てみましたが、ImageLockMode::WriteOnly を指定した際に黒一色(R=G=B=0) にBitmap を 初期化するという記述は見つけられませんでした。
ちょっと、びっくりしましたが、何か、これには、深いわけとかあるのでしょうか? 僕のへなちょこな知識と経験では、さっぱり、わかりません(^^)。
------------------------------------------------------------ C++/CLI でのImageLockMode::WriteOnly の動作に関するサンプルコード (当然、C# に移植可能です) ------------------------------------------------------------ using namespace System::Drawing::Imaging; using namespace System::Drawing;
int main() { Bitmap ^bmp = gcnew Bitmap( 100, 100 );
Graphics::FromImage( bmp )->Clear( Color::Blue );
// 最初に、Bitmap を出力しておく(青一色) bmp->Save( "before.bmp" ); // Bitmap 領域をロックしてみる(ここで、ImageLockMode::WriteOnly から、ImageLockMode::ReadWrite に変えると出力されるbmpが変わる) BitmapData ^bmpData = bmp->LockBits( Rectangle(0, 0, bmp->Width, bmp->Height), ImageLockMode::WriteOnly, PixelFormat::Format24bppRgb );
// 何も処理をせずに // Bitmap の領域のロックを解放 bmp->UnlockBits( bmpData );
// 再度、Bitmap を出力(ここでは、何故か、黒一色) bmp->Save( "after.bmp" ); }
|