C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 44 を表示中)
■23501 / )  ImageLockMode::WriteOnly
□投稿者/ 雲 (7回)-(2008/08/17(Sun) 14:46:19)

分類:[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" );
}
返信 編集キー/


管理者用

- Child Tree -