2013-06-27 17 views
6

Belki bu çözmek için çok kolay bir sorundur, ancak henüz mükemmel bir çözüm bulamadım. C# ile ico bir png dönüştürmek için çalışıyor ve çeşit olarak aşağıda çalışan bir solüsyon verir soru converting .PNG to .ICO in C/C# bulundu ediyorum:Yüksek kaliteli dönüştürme ico

: Ben biraz bu yaklaşımı değişti

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

Kendi proje için

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 
     } 
    } 
} 

Yaşadığım sorun, sonuçta oluşan ico kalitesinin düşük olması, 16x16 boyutuna getirilmesinin ve renk derinliğinin bir kısmını kaybetmesinin, belki de yalnızca 16 renge sahip olduğunu tahmin ediyorum. Daha yüksek kaliteli bir ico dosyasına nasıl dönüştürebilirim?

+0

Png için: https://gist.github.com/darkfall/1656050. “GetHicon” dan daha sağlam bir şeye ihtiyacınız olacağını söyleyebilirim çünkü bu hızlı ve kirli bir yöntemdir ve hiçbir şekilde kayıpsız değildir. – DonBoitnott

+0

@DonBoitnott Lütfen yorumunuzu yanıt olarak gönderin. Senin önerilerinle çalışmayı başardım ve bunun doğru cevap olduğuna inanıyorum. – Bazzz

cevap

7

yoluyla C# programlı mevcut olmalıdır Edeceğini inanıyorum GetHIcon()'dan daha sağlam bir yönteme ihtiyacım var. Daha çok "hızlı ve kirli" bir seçenek ve hiçbir şekilde kayıpsız. İşte

ICO olarak dönüştürme yolunda görüntü kalitesini koruyabilir bir sınıfın bir örnek:

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

+0

Gr8 betiği bir çekicilik gibi çalışır, ancak 255'ten daha büyük bir simgeyi oluşturmaya çalışırsam, Arithmetic işlemi bir taşma hatasıyla sonuçlanır. Muhtemelen CBYTE() izin verilen maksimum değer 255'tir. Kodunuzu kullanarak yüksek kaliteli Simgeler yapmak için herhangi bir geçici çözüm/öneri? – VarunC

2

Başvurulan soruda, kabul edilen çözüm, png'den ico'ya dönüştürülürken boyut, renk derinliğini vb. Kontrol etme yeteneğine sahip olmanızı sağlayan harika bir görüntü işleme aracı olan imagemagick'i kullanır. Bu çözümü denemenizi tavsiye ederim. dönüştürmek

benzer görünümde olacaktır imagemagick programını kullanarak

-Resize x16 -Gravite merkezi -Kırpma -flatten (256 çıkış/favicon.ico

-Renkler 16x16 + 0 + 0 input.png \ sonra

). Eğer aradığınızı elde etmek -Resize ve -Renkler kontrol edebilecek aynı seçenekler http://imagemagick.codeplex.com

+0

Soruda bundan bahsetmediğim için özür dilerim, ancak mümkünse dış kütüphanelere bağımlı olmamayı tercih ederim. Her şey başarısız olursa öneriyi düşünürdüm. – Bazzz

İlgili konular