画像があり、特定の領域のピクセル値を読み取りたい。
メソッドの最初の引数である長方形は、LockBits()
サブセクションを指定できるようにするためにあると想定しました。BitmapData.Stride
ただし、デバッグ中に、の値が元のビットマップの幅の3倍であり、長方形の幅の3倍ではないことに気付きました。
どうしてこれなの?長方形パラメータの目的を誤解しましたか?
これにより、GDI+はピクセルデータのメモリへのマッピングを最適化することができます。小さい長方形を使用すると、必要なメモリページが少なくなります。ストライドは同じで、元のビットマップのストライドです。また、長方形のサイズに関係なく、ビットマップのスキャンラインにインデックスを付けるときにその値を使用する必要があります。
これにより、新しいバッファを割り当ててピクセルデータをコピーする代わりに、すでに割り当てられているバッファへのポインタを提供できます。