byte* src = scanLine0;
byte* dest = (byte*) bitmapLock.Data.DataPointer.ToPointer();
- for( int y = 0; y < this.サイズdpx.Height; y++ )
+ if( pitch != bitmapStride )
{
- // ARGB32 to G8B8R8X8 ではデータ変換が不要なので、一行を一気にコピー。
- 動画.CopyMemory( dest, src, (int) this.サイズdpx.Width * 4 ); // ARGB=4バイト。
- src += pitch;
- dest += bitmapStride; // bitmapStride は byte 単位
+ for( int y = 0; y < this.サイズdpx.Height; y++ )
+ {
+ // ARGB32 to G8B8R8X8 ではデータ変換が不要なので、一行を一気にコピー。
+ 動画.CopyMemory( dest, src, (int) this.サイズdpx.Width * 4 ); // ARGB=4バイト。
+ src += pitch;
+ dest += bitmapStride; // bitmapStride は byte 単位
+ }
+ }
+ else
+ {
+ // ARGB32 to G8B8R8X8 ではデータ変換が不要、かつ pitch と bitmapStride が等しいので、全行を一括してコピー。
+ 動画.CopyMemory( dest, src, (int) ( this.サイズdpx.Width * this.サイズdpx.Height * 4 ) ); // ARGB=4バイト。
}
}
}