【问题标题】:Read image from varbinary case sql server c#从varbinary case sql server c#读取图像
【发布时间】:2014-07-26 04:11:16
【问题描述】:

我在尝试将流转换为图像时遇到问题。它向我显示了以下错误: 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;
}

【问题讨论】:

  • 你遇到了什么错误?
  • 顺便说一句,您可以使用new MemoryStream(byteArrayIn) 并为您自己节省WriteSeek 调用。
  • 是的。它向您显示一个错误。我们是否应该猜测或投入工作,或者你能 - 啊 - 足够聪明地告诉我们错误,也是吗?提示:看看代码,错误,你可能会意识到阅读错误是有道理的。
  • 第一次它告诉我它无法读取一个封闭的流,我删除 ms.close() 现在它告诉我 Le paramètre n'est pas valide。 (无效参数)
  • @user3710293 查看 Dmitry 和我给出的答案,然后选择您更喜欢的答案。由于您将关闭的流传递给FromStream 方法,因此引发“无效参数”错误。

标签: c# sql sql-server image


【解决方案1】:

你不应该关闭这么快

   ms.Close();  // <- That's 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);
  }

【讨论】:

    【解决方案2】:
    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-07
      • 2018-01-19
      • 2022-01-12
      • 2017-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多