私はのような配列を持っていbyte[] pixels
ます。データをコピーせずにそこbitmap
からオブジェクトを作成する方法はありますか?pixels
私は小さなグラフィックライブラリを持っています。WinForms
ウィンドウに画像を表示する必要がある場合は、そのデータをbitmap
オブジェクトにコピーしてから、drawメソッドを使用します。このコピープロセスを回避できますか?どこかで見たのを覚えていますが、記憶が悪いのかもしれません。
編集:私はこのコードを試しましたが、動作しますが、これは安全ですか?
byte[] pixels = new byte[10 * 10 * 4];
pixels[4] = 255; // set 1 pixel
pixels[5] = 255;
pixels[6] = 255;
pixels[7] = 255;
// do some tricks
GCHandle pinnedArray = GCHandle.Alloc(pixels, GCHandleType.Pinned);
IntPtr pointer = pinnedArray.AddrOfPinnedObject();
// create a new bitmap.
Bitmap bmp = new Bitmap (10, 10, 4*10, PixelFormat.Format32bppRgb, pointer);
Graphics grp = this.CreateGraphics ();
grp.DrawImage (bmp, 0, 0);
pixels[4+12] = 255; // add a pixel
pixels[5+12] = 255;
pixels[6+12] = 255;
pixels[7+12] = 255;
grp.DrawImage (bmp, 0, 40);