2010-11-18 57 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]; 
} 

我有這個問題,這個解決方案解決了它。祝你好運!

相關問題