2013-06-27 77 views
6

也許這是解決一個非常簡單的問題,但我還沒有找到完美的解決方案呢。 我想轉換一個PNG使用C#來ICO,發現問題converting .PNG to .ICO in C/C#哪種類型的給如下工作方案:PNG轉換到高品質的ICO

using (FileStream stream = File.OpenWrite(@"C:\temp\test.ico")) 
{ 
    Bitmap bitmap = (Bitmap)Image.FromFile(@"c:\temp\test.png"); 
    Icon.FromHandle(bitmap.GetHicon()).Save(stream); 
} 

對於我自己的項目,我也稍微改變了這種做法:

string pngFile = "path/to/pngfile"; 
using (Bitmap bitmap = new Bitmap(pngFile)) 
{ 
    using (Icon icon = Icon.FromHandle(bitmap.GetHicon())) 
    { 
     using (MemoryStream stream = new MemoryStream()) 
     { 
     icon.Save(stream); 
     // something interesting with icon here 
     } 
    } 
} 

,我遇到的問題是,所產生的ICO質量很差,我猜它得到調整爲16×16,失去了它的一些色彩深度,也許現在只有16種顏色?我怎樣才能轉換到更高質量的ico文件?

+0

您可以試試:https://gist.github.com/darkfall/1656050。我可以告訴你,你將需要比'GetHicon'更強大的東西,因爲這是一種快速和骯髒的方法,絕不意味着無損。 – DonBoitnott

+0

@DonBoitnott請發表您的評論作爲答案。我設法讓它與你的建議合作,我相信這是正確的答案。 – Bazzz

回答

7

提供C#編程的,我相信你會需要比GetHIcon()更強大的方法。它更像是一種「快速和骯髒」的選擇,決不是虧損。

這裏有一個類,它可以在途中保持圖像質量轉換爲ICO的例子:

https://gist.github.com/darkfall/1656050

+0

GR8腳本作品就像一個魅力,但我打'算術運算導致的overflow'錯誤,如果我嘗試生成高度大於255的圖標..可能是由於CBYTE()最大允許爲255 - 你有使用您的代碼製作高質量圖標的任何解決方法/建議? – VarunC

2

在所涉及的問題,接受的解決方案使用ImageMagick的,這是一個偉大的圖像處理工具,讓你從巴紐ICO轉換時控制大小,顏色深度等的能力。我真的會建議嘗試這個解決方案。

使用ImageMagick的效用會看起來像

轉換調整大小X16 -gravity中心-crop 16×16 + 0 + 0 input.png \ -flatten -colors 256輸出/ favicon.ico的

(那麼你可以控制調整大小和-colors實現你在找什麼。)

相同的選項應該通過http://imagemagick.codeplex.com

+0

對不起,沒有提到這個問題,但我不希望依賴外部庫,如果可能的話。如果一切都失敗了,我會考慮你的建議。 – Bazzz