У меня проблема, когда я пытаюсь преобразовать поток в изображение. Это показывает мне ошибку: Image returnImage = Image.FromStream(ms);
if (reader[12] != System.DBNull.Value)
{
Byte[] image = (Byte[])reader[12];
c.image = byteArrayToImage(image);
}
public Image byteArrayToImage(byte[] byteArrayIn)
{
MemoryStream ms = new MemoryStream();
ms.Write(byteArrayIn, 0, byteArrayIn.Length);
ms.Seek(0, SeekOrigin.Begin);
ms.Close();
Image returnImage = Image.FromStream(ms);
return returnImage;
}
Вы не должны закрывать поток так скоро:
ms.Close(); // <- That wrong:
// You can't create an image from a disposed stream
Image returnImage = Image.FromStream(ms);
Сделайте это так:
...
using (MemoryStream ms = new MemoryStream()) {
ms.Write(byteArrayIn, 0, byteArrayIn.Length);
ms.Seek(0, SeekOrigin.Begin);
return Image.FromStream(ms);
}
MemoryStream ms = new MemoryStream();
ms.Write(byteArrayIn, 0, byteArrayIn.Length);
ms.Seek(0, SeekOrigin.Begin);
ms.Close(); // <-- Remove this line
Image returnImage = Image.FromStream(ms);
return returnImage;
В этом коде вы закрываете поток перед созданием изображения. Вы не можете читать из закрытого потока. Измените свой код на это:
using (MemoryStream ms = new MemoryStream(byteArrayIn))
{
Image returnImage = Image.FromStream(ms);
return returnImage;
}
Этот код может генерировать ошибки GDI+. Таким образом, вам не нужно бояться вообще не избавляться от потока. Сборщик мусора будет делать это в любом случае, поэтому, если вы получите ошибки в GDI+, используйте это:
MemoryStream ms = new MemoryStream(byteArrayIn);
Image returnImage = Image.FromStream(ms);
return returnImage;