2017年7月4日火曜日

C#でのBitmapクラスへのデータの設定方法

Bitmapクラスへのデータの設定方法

入力データが、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 件のコメント:

コメントを投稿