Я использую ниже метод для преобразования 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)
, но я получаю эту ошибку:
Invalid access to memory location.
Может кто-нибудь, пожалуйста, руководство?
Кроме того, FYI, я мог бы использовать MemoryStream
, чтобы получить Bitmap
из byte[]
, но в то время я получал исключение «Параметр недействителен». Именно поэтому маршрут прошел до Marshal
.
Ум, вы уверены в этом, вы удаляете объект, который возвращается. –
@ScottChamberlain Вы правы, я пропустил это. Я попытался удалить ответ, но вы не можете удалить принятый ответ ... – MarcinJuraszek
Я вижу, что вы пытаетесь сделать с вашим редактированием, я сделал несколько изменений, чтобы сделать его более ясным, надеюсь. Если я ошибаюсь, откажитесь. –