【WPF】writeablebitmap の使い方めも

探した範囲でなかなか良い資料が見つからず、
数日引っかかっていたので自分用メモ。
コード抜粋+要点まとめなのでコピペでは動かないので注意。


基本はロック〜アンロックの間に、
WritePixels関数で色情報を書き込む流れ。
元画像の一部を切り取るときはCopyPixels関数を使う。
この両関数の仕様をなかなか理解できずに泥沼。


第一引数のInt32Rectは領域指定。書かないと全域が指定される(?)
第二引数はコピー先(or転写元)の配列。
この辺は画像のフォーマットに依る。今回はIndexed8フォーマットを使用したのでbyte。
第三引数は一行あたりのバイト数?"stride"以上の説明が見つからず困った。
第四引数はコピー先(or転写元)のオフセット値。
基本的に配列まるごとコピー(or書き込み)なら0で大丈夫みたい。


以下コード断片。


//--------------------------------------------------

BitmapImage bitmap;
WriteableBitmap writeableBitmap;

//↑は適当に初期化する


writeableBitmap.Lock();

Int32Rect rectTo = new Int32Rect(tx, ty, WIDTH, HEIGHT);
Int32Rect rectFrom = new Int32Rect(fx, fy, WIDTH, HEIGHT);

byte[] pixels = new byte[WIDTH * HEIGHT];

bitmap.CopyPixels(rectFrom, pixels, WIDTH, 0);
writeableBitmap.WritePixels(rectTo, pixels, WIDTH, 0);

writeableBitmap.Unlock();

//--------------------------------------------------


元画像の一部をWriteableBitmapの指定した部分に書きこむような処理。
マップエディタとかはこれで作れそう。


そろそろエディタとかにも力を入れないとリソース側が追いつきそうにない今日この頃。
モノクロは中途半端な出来のエディタだったので色々大変でした。