2013-06-27 5 views
6

शायद यह हल करने में एक बहुत ही आसान समस्या है लेकिन मुझे अभी तक सही समाधान नहीं मिला है। मैं के साथ सी # इको ​​करने के लिए एक png कन्वर्ट करने के लिए कोशिश कर रहा हूँ और सवाल converting .PNG to .ICO in C/C# जो एक तरह से नीचे के रूप में काम कर रहे समाधान देता है पाया:पीएनजी को उच्च गुणवत्ता में परिवर्तित करें 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 
     } 
    } 
} 

समस्या जो मैं अनुभव कर रहा हूं वह यह है कि परिणामी आईको खराब गुणवत्ता का है, मुझे लगता है कि इसे 16x16 में बदल दिया गया है और इसकी कुछ रंग गहराई खो गई है, शायद अब केवल 16 रंग हैं? मैं उच्च गुणवत्ता वाले आईसीओ फ़ाइल में कैसे परिवर्तित कर सकता हूं?

+0

आप कोशिश कर सकते हैं: https://gist.github.com/darkfall/1656050। मैं आपको बता सकता हूं कि आपको 'गेटहिकॉन' की तुलना में कुछ और मजबूत की आवश्यकता होगी क्योंकि यह एक त्वरित और गंदे विधि है, और इसका मतलब किसी भी तरह से लापरवाही नहीं है। – DonBoitnott

+0

@DonBoitnott कृपया अपनी टिप्पणी को एक उत्तर के रूप में पोस्ट करें। मैं इसे आपके सुझाव के साथ काम करने के लिए उलझ गया और मुझे विश्वास है कि यह सही जवाब है। – Bazzz

उत्तर

7

के माध्यम से सी # में प्रोग्राम के रूप में उपलब्ध होना चाहिए मेरा मानना ​​है कि आप करेंगे GetHIcon() से अधिक मजबूत विधि की आवश्यकता है। यह एक "त्वरित और गंदे" विकल्प से अधिक है, और किसी भी तरह से नुकसान कम नहीं है।

यहां कक्षा कि ICO के रूप में परिवर्तित करने के रास्ते पर छवि गुणवत्ता की रक्षा कर सकते का एक उदाहरण है:

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

+0

Gr8 स्क्रिप्ट एक आकर्षण की तरह काम करता है, लेकिन अगर मैं 255 से अधिक ऊंचाई वाले आइकन उत्पन्न करने का प्रयास करता हूं तो मैं 'अंकगणितीय ऑपरेशन के परिणामस्वरूप ओवरफ्लो' त्रुटि को मार रहा हूं .. शायद सीबीवाईटीई() की अधिकतम अनुमति 255 है - क्या आपके पास है अपने कोड का उपयोग कर उच्च गुणवत्ता वाले आइकन बनाने के लिए कोई कामकाज/सुझाव? – VarunC

2

संदर्भित प्रश्न में स्वीकार्य समाधान छवि मैगिक का उपयोग करता है, जो एक महान छवि मैनिपुलेशन टूल है जो आपको पीएनजी से आईसीओ में परिवर्तित होने पर आकार, रंग गहराई इत्यादि को नियंत्रित करने की क्षमता देता है। मैं वास्तव में उस समाधान की कोशिश करने का सुझाव दूंगा।

ImageMagick उपयोगिता का प्रयोग की तरह

कुछ देखने के लिए बदल जाएगा -resize x 16 -gravity केंद्र -Crop 16x16 + 0 + 0 input.png \ -flatten -colors 256 उत्पादन/favicon.ico

(आप तो -resize और -colors को नियंत्रित कर सकता है को प्राप्त करने के लिए आप क्या देख रहे हैं।)

एक ही विकल्प http://imagemagick.codeplex.com

+0

इस प्रश्न में इसका उल्लेख न करने के लिए खेद है, लेकिन यदि संभव हो तो मैं बाहरी पुस्तकालयों पर निर्भर नहीं होना चाहूंगा। यदि सबकुछ विफल रहता है तो मैं आपके सुझाव पर विचार करूंगा। – Bazzz

संबंधित मुद्दे