简体   繁体   English

从varbinary case SQL Server C#中读取图像

[英]Read image from varbinary case sql server c#

I have a problem when I try to convert stream to image. 尝试将流转换为图像时出现问题。 It shows me an error in: Image returnImage = Image.FromStream(ms); 它向我显示了一个错误: 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;
}

You should not close the stream so soon : 您不应该这么快就 关闭流:

   ms.Close();  // <- That's wrong:
   // You can't create an image from a disposed stream
   Image returnImage = Image.FromStream(ms); 

Do it like that: 那样做:

  ...
  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;

In this code you close the stream before creating the image. 在此代码中,您在创建图像之前关闭流。 You can not read from a closed stream. 您无法从封闭的流中读取内容。 Change your code to this: 将代码更改为此:

using (MemoryStream ms = new MemoryStream(byteArrayIn))
{
    Image returnImage = Image.FromStream(ms);
    return returnImage;
}

That code may generate GDI+ errors. 该代码可能会生成GDI +错误。 So you don't have to be afraid of not disposing of the stream at all. 因此,您不必担心根本不丢弃流。 The garbage collector will do this anyway, so if you get errors in GDI+, use this: 垃圾收集器仍然会执行此操作,因此,如果您在GDI +中遇到错误,请使用以下命令:

MemoryStream ms = new MemoryStream(byteArrayIn);
Image returnImage = Image.FromStream(ms);
return returnImage;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM