2008-12-21 11 views
18

मैं एक WPF ऐप बना रहा हूं, इसलिए मैं ज्यादातर आइकन के लिए इमेजसोर्स क्लास के साथ काम कर रहा हूं। हालांकि, सिस्टम ट्रे आइकन System.Drawing.Icon प्रकार होना चाहिए। क्या पीएनजी छवि से ऐसी वस्तु बनाना संभव है?मैं एक पीएनजी छवि से एक आइकन कैसे प्राप्त करूं?

मैं कोशिश की है निम्नलिखित:

private static System.Drawing.Icon _pngIcon; 
public static System.Drawing.Icon PngIcon 
{ 
    get 
    { 
     if (_pngIcon == null) 
     { 
      //16x16 png image (24 bit or 32bit color) 
      System.Drawing.Bitmap icon = global::BookyPresentation.Properties.Resources.star16; 
      MemoryStream iconStream = new MemoryStream(); 
      icon.Save(iconStream, System.Drawing.Imaging.ImageFormat.Png); 
      iconStream.Seek(0, SeekOrigin.Begin); 
      _pngIcon = new System.Drawing.Icon(iconStream); //Throws exception 
     } 
     return _pngIcon; 
    } 
} 

चिह्न निर्माता निम्न संदेश के साथ एक अपवाद फेंकता है: "। तर्क 'तस्वीर' एक तस्वीर है कि एक चिह्न के रूप में इस्तेमाल किया जा सकता होना चाहिए"

मुझे लगा कि यह छवि रंग की थोड़ी गहराई के साथ कुछ हो सकता है क्योंकि मुझे इससे पहले कुछ समस्याएं थीं, लेकिन 32 बिट और 24 बिट छवियों दोनों काम नहीं कर पाए। क्या यह संभव है कि मैं क्या करने की कोशिश कर रहा हूं?

उत्तर

17

मुझे लगता है कि इससे पहले कि आप .ico के लिए अपनी छवि परिवर्तित कुछ इस तरह की कोशिश कर सकते हैं:

var bitmap = new Bitmap("Untitled.png"); // or get it from resource 
    var iconHandle = bitmap.GetHicon(); 
    var icon = System.Drawing.Icon.FromHandle(iconHandle); 

icon कहाँ आइकन जो आप की जरूरत शामिल होंगे।

+4

जब मैं इस विधि का उपयोग करता हूं तो मुझे केवल 16 रंग आइकन मिलते हैं –

0

आप png2ico नामक एक छोटी कमांड लाइन ऐप आज़मा सकते हैं। मैं इसे पीएनजी से विंडोज आइकन बनाने के लिए उपयोग करता हूं।

+0

मुझे लगता है कि कोशिश की, लेकिन यह पूरी तरह से पारदर्शी क्षेत्रों के किनारों पर छवि को बर्बाद कर दिया। –

3

प्रतीक 3 या 4 छवि आकार का एक संयोजन कर रहे हैं:

48 × 48, 32 × 32, 24 × 24 (वैकल्पिक), और 16 × 16 पिक्सल।

और/भी तीन अलग-अलग रंग की गहराई को शामिल करना चाहिए कर सकते हैं:

  • 8-बिट अल्फा (32-बिट)
  • 8 बिट (256 रंग) 1-बिट पारदर्शिता
  • साथ साथ 24 बिट
  • 1-बिट पारदर्शिता

तो .png स्मृति स्ट्रीम आइकन के निर्माता में फिट नहीं जा रहा है के साथ 4-बिट (16 रंग)। वास्तव में, यदि आप अन्य constructor overloads पर नोट्स पढ़ते हैं, तो आपको फ़ाइल में सही आकार आइकन खोजने के लिए सभी "आकार" या चौड़ाई और ऊंचाई माप दिखाई देंगे। प्रतीक के मैनुअल निर्माण पर

अधिक जानकारी "Creating Windows XP Icons"

3

अंतर्गत मिल सकता है एक .NET परियोजना IconLib कहा जाता है।

public void Convert(string pngPath, string icoPath) 
{ 
    MultiIcon mIcon = new MultiIcon(); 
    SingleIcon sIcon = mIcon.Add("Icon1"); 
    sIcon.CreateFrom(pngPath, IconOutputFormat.FromWin95); 
    mIcon.SelectedIndex = 0; 
    mIcon.Save(icoPath, MultiIconFormat.ICO); 
} 
+0

धन्यवाद, मुझे इस कार्यक्रम की आवश्यकता है;) – frameworkninja

1

आप एक विंडो आइकन के ImageSource को एक पीएनजी छवि में सेट कर सकते हैं और यह आश्चर्यजनक रूप से काम करता है। हालांकि मैंने ट्रे आइकन के लिए यह सत्यापित नहीं किया है।

+2

यह ट्रे आइकन के लिए काम नहीं करता है। –

7

एक वेबसाइट (http://www.convertico.com/) भी है जो पीएनजी को आईसीओ में परिवर्तित करती है।

1

मेरे लिए यह अपने काम करने की कोशिश करें,

window.Icon = BitmapFrame.Create(Application.GetResourceStream(new Uri("YourImage.png", 
UriKind.RelativeOrAbsolute)).Stream);