【问题标题】:Parameter is not valid when getting image from stream从流中获取图像时参数无效
【发布时间】:2010-06-14 10:46:25
【问题描述】:

我有这个代码:

              MemoryStream ms = new MemoryStream(newbytes, 0,
            newbytes.Length);
              ms.Position = 0;      
        ms.Write(newbytes, 0, newbytes.Length);
              Image img = Image.FromStream(ms);
            img.Save(@"C:\Users\gsira\Pictures\Blue hills5.jpg");

我在 Image.FromStream(ms) 调用时收到此错误:

System.ArgumentException:参数无效。 at System.Drawing.Image.FromStream(Stream stream, Boolean useEmbeddedColorManagement, Boolean validateIma

我该如何解决这个问题?解决这个问题的几个链接(一个在 MSDN 线程上)被破坏了,所以我迷路了。

【问题讨论】:

    标签: c# stream


    【解决方案1】:

    如果您使用字节数组初始化 MemoryStream(我假设 newbytes 是这样),则不需要写入它。

    您的示例中对Write(newbytes, 0, newbytes.Length) 的调用完全是多余的。

    var s = new MemoryStream(newbytes, 0, newbytes.Length);
    var i = Image.FromStream(s);
    
    i.Save(@"C:\Users\gsira\Pictures\Blue hills5.jpg");
    

    以上对我有用,其中newbytes 是我硬盘上图像文件内容的字节数组。

    【讨论】:

      【解决方案2】:

      在向其中写入字节后,尝试将内存流倒回到最开始。

      ms.Seek(0, SeekOrigin.Begin);
      

      可以创建 Image.FromStream

      【讨论】:

      • 同样的问题。代码为: MemoryStream ms = new MemoryStream(newbytes, 0, newbytes.Length); ms.Seek(0, SeekOrigin.Begin); ms.Write(newbytes, 0, newbytes.Length); Image img = Image.FromStream(ms);
      • 你应该追求 ms.Write
      • 还是同样的问题。我已经把那行代码在写完之后剪切并粘贴了。
      • 我将图像的字节插入 sql server,然后将它们取回(以单独的方法)。 newbytes 是检索到的图像的字节数。
      • 我想问题出在二进制放置/获取中。如果已经是图像,请尝试将字节数组保存到硬盘。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-09
      • 1970-01-01
      • 1970-01-01
      • 2013-11-09
      • 2023-03-08
      • 2012-11-21
      相关资源
      最近更新 更多