2010-11-18 27 views
7

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

我的代码如下..在中间线发生

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

的异常。

这段代码完美地运行了9次,但对于一些图标来说,即使认为图标是一个有效的图像(或者至少它看起来像,它在浏览器中显示时指向它)我得到这个异常。

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

感谢

戴夫

编辑:这似乎抛出错误的数组中的值是127

+0

你如何收集这些'favicon'文件?你确定该文件始终存在吗?你检查'imageByteArray.Length == 0'吗? – Oded 2010-11-18 16:11:56

+0

是的,我相信数组不是零,当我将这个图标保存到Db时,它工作正常。 – Dave 2010-11-18 16:14:44

回答

20

有没有必要把它变成一个图像,只是吐出字节直出:

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

完美,我真的花了太多时间在箱子里思考。 – Dave 2010-11-18 17:23:55

+1

最好使用'using'语句,而不是手动打开和关闭流。 – SepehrM 2014-11-05 11:41:03

+0

完美答案! – Rahnzo 2015-08-10 02:29:33

0

添加图片格式:

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

异常抛出该行之前,从行 Image.FromStream(stream); 看来,在爆炸的字节数组中的值包含127 – Dave 2010-11-18 16:12:41

+0

我已更新。这是流的位置。 – Aliostad 2010-11-18 16:17:42

+0

对不起,已经试过这个,它没有任何区别。同样,这似乎只发生在一些网站上。谢谢您的帮助! – Dave 2010-11-18 16:24:23

1

我知道你有你需要的答案,但我只想继续你最初的想法。我认为这个问题是您的字节数组不知何故已经变了,变得字节字符数组,你只需要添加以下代码,使之再次成为字节数组:

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

我有这个问题,这个解决方案解决了它。祝你好运!

相关问题