我正在使用以下方法将 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
的原因。