从byte []创建和保存图像会导致参数无效异常

时间:2010-11-18 16:07:54

标签: c# asp.net image bytearray stream

我已经实现了以下连接到webservice并从给定站点下载favicon的功能,并将其保存到我存储在数据库中的byte []中。我现在想要设置它以便将图标保存到磁盘。但是当我尝试从byte []创建图像时,我得到一个“参数无效”。

我的代码如下..

stream.Write(imageByteArray, 0, imageByteArray.Length);
Image i = Image.FromStream(stream); // EXCEPTION HAPPENS HERE.
i.Save(@"C:\tmp\" + filename + ".ico");

中间行发生异常。

这个代码在十分之一的情况下完美地运行了9次,但是对于某些favicons,甚至认为图标是有效的图像(或者至少它看起来是,并且当它指向它时它在浏览器中显示)我得到了这个例外。

有没有人有任何想法?我在这里拔头发!

谢谢

戴夫

编辑:显示抛出错误的数组中的值为127。

3 个答案:

答案 0 :(得分:20)

没有必要将它放入图像中,只是直接吐出字节:

var fs = new BinaryWriter(new FileStream(@"C:\\tmp\\" + filename + ".ico", FileMode.Append, FileAccess.Write));
fs.Write(imageByteArray);
fs.Close();

答案 1 :(得分:1)

我知道你得到了你需要的答案,但我只是想继续你原来的想法。我认为问题是你的字节数组以某种方式被改变并成为字节字符数组,你只需要添加这个代码使它再次成为字节数组:

for (int i=0;i<imageByteArray.Length;i++)
{
    imageByteArray[i]=(byte) imageByteArray[i];
}

我有这个问题并通过这个解决方案解决了。祝你好运!

答案 2 :(得分:0)

添加图片格式:

stream.Position = 0;
i.Save(@"C:\tmp\" + filename + ".ico", System.Drawing.Imaging.ImageFormat.Icon);