Bitmapクラスへのデータの設定方法
入力データが、TopDownでもBottomUpでも、変換可能な関数を作成したので、メモ。
入力データが、TopDownでもBottomUpでも、変換可能な関数を作成したので、メモ。
void CopyBitmapData( Byte[] pixelData, Boolean isTopDown,Int32 bitCount, Bitmap bmp )
{
BitmapData bmpData = bmp.LockBits(
new Rectangle(0, 0, bmp.Width, bmp.Height),
ImageLockMode.ReadWrite,
bmp.PixelFormat);
var stride = (bmp.Width * bitCount + 31) / 32*4;
int pos = bmpData.Scan0.ToInt32();
Parallel.For( 0, bmp.Height, ( hpos ) =>
{
var destPtr = IntPtr.Zero;
if( isTopDown )
{
destPtr = new IntPtr( pos + hpos * stride );
}
else
{
destPtr = new IntPtr( pos + ( bmp.Height - hpos - 1 ) * stride );
}
Marshal.Copy( pixelData, hpos * stride, destPtr, stride );
} );
bmp.UnlockBits( bmpData );
}
0 件のコメント:
コメントを投稿