【发布时间】:2014-02-02 18:05:06
【问题描述】:
我正在使用以下方法将byte[] 转换为Bitmap:
public static Bitmap ByteArrayToBitmap(byte[] byteArray)
{
int width = 2144;
int height = 3;
Bitmap bitmapImage = new Bitmap(width, height, PixelFormat.Format32bppPArgb);
BitmapData bmpData = bitmapImage.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, PixelFormat.Format32bppPArgb);
IntPtr ptr = bmpData.Scan0;
try
{
Marshal.Copy(byteArray, 0, ptr, byteArray.Length);
bitmapImage.UnlockBits(bmpData);
return bitmapImage;
}
finally
{
//Marshal.FreeHGlobal(ptr); //Do I need this?
}
}
只是想知道我是否需要在这里释放任何资源?
尝试调用Marshal.FreeHGlobal(ptr),但我收到此错误:
对内存位置的访问无效。
谁能指导一下?
另外,仅供参考,我可以使用MemoryStream 从byte[] 中获取Bitmap,但在这种情况下我得到了“参数无效”异常。这就是为什么选择Marshal 的原因。
【问题讨论】:
标签: c# bitmap marshalling