我有一个像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);