LockedBitmap
C# でのビットマップ データの操作を簡素化するクラスを使用しています。現在、データをローカルbyte[]
配列にコピーしています。これは、クラス メソッドによってアクセスされ、ピクセルの色の値を取得/設定します。
これは、ポインタを介してロックされたビットマップ データに直接アクセスするよりも高速または優れていますか? コピーはまったく必要ですか?
編集:ビットマップデータを直接操作できるかどうかは尋ねていません。私はこれを毎日使用しています。2つの方法の比較と、ピクセルデータをコピーする必要があるかどうかを尋ねているだけです。
ピクセル データを一時配列にコピーする:
// create byte array to copy pixel values
int step = Depth / 8;
Pixels = new byte[PixelCount * step];
Iptr = bitmapData.Scan0;
// Copy data from pointer to array
Marshal.Copy(Iptr, Pixels, 0, Pixels.Length);
ピクセル値の直接読み取り:
byte* p = (byte*)(void*)bmData.Scan0.ToPointer();
int ws = bmData.Stride;
byte* row = &p[i * ws];
byte Gcolor = row[j];
byte Bcolor = row[j + 1];
byte Rcolor = row[j + 2];