使用内存流和二进制写入器进行图像转换

时间:2014-09-15 13:51:07

标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 asp-classic

我正在使用下面的代码编写关于图像转换为gif格式的代码。我收到错误消息“无法访问已关闭的流。”

protected void Button1_Click(object sender, EventArgs e)
{
    //Variable declaration
    MemoryStream memoryStream;
    BinaryWriter binaryWriter;
    System.Drawing.Image image;
    Byte[] buf1;

    //Variable declaration

    MemoryStream stream = new MemoryStream();

    memoryStream = new MemoryStream();

    binaryWriter = new BinaryWriter(stream);

    string[] fileEntries = Directory.GetFiles(@"C:\Users\OM\Documents\Visual Studio 2012\WebSites\WebSite6\img\");
    int numFiles = fileEntries.Length;
    for (int picCount = 0; picCount < numFiles; picCount++)
    {
        image = System.Drawing.Image.FromFile(fileEntries[picCount]);

        image.Save(memoryStream, ImageFormat.Gif);
        buf1 = memoryStream.ToArray();

        memoryStream.SetLength(0);


    }
     binaryWriter.Close();
    System.Drawing.Image streamGIF = System.Drawing.Image.FromStream(stream);
    Label1.Text += "<img src=" + streamGIF + " /><br />";
}

1 个答案:

答案 0 :(得分:0)

您发布的代码毫无意义。

  • 创建两个新的MemoryStream个对象(streammemoryStream);
  • BinaryWriter;
  • 之上创建stream
  • 遍历特定目录中的文件列表;
    • Image;
    • 的形式阅读每个文件
    • 使用Image格式将memoryStream保存到Gif;
    • memoryStream的内容复制到字节数组;
    • 清除memoryStream;
    • 扔掉你刚读过的字节数组;
  • 关闭binaryWriter(也关闭stream);
  • 尝试从已关闭且空的stream变量中加载图像;
  • Label1的文字设为<img src="System.Drawing.Image" /><br />;

异常的直接问题可以通过在尝试从流中读取之前不关闭BinaryWriter对象来解决。

但是,这不会改变您的代码不会向streambinaryWriter写入任何内容的事实,因此Image.FromStream方法将无效。

它也不会改变您无法将System.Drawing.Image用作HTML src代码的<img>属性这一事实。