2011-02-04 5 views
5

में मैं एक पारदर्शी पीएनजी छवि को एक सिस्टम में एक स्रोत स्रोत के रूप में परिवर्तित करना चाहता हूं। ड्रॉइंग.कॉन जो पीएनजी की पारदर्शिता का सम्मान करता है।पारदर्शी पीएनजी को सिस्टम में बदलें। ड्रॉइंग। कोड

WPF किसी भी तरह से यह आंतरिक रूप से ऐसा कर सकता है यदि आप किसी विंडो के लिए एक पीएनजी छवि स्रोत पर आइकन सेट करते हैं, लेकिन क्या मैं इसे मैन्युअल रूप से कर सकता हूं? विशेष रूप से मुझे सिस्टम ट्रे को सूचित करने के लिए आइकन की आवश्यकता है और मैं वास्तव में बेकार .ico प्रारूप संसाधनों का उपयोग करने से बचना चाहता हूं।

+0

एक साइड नोट के रूप में, विंडोज विस्टा + वास्तव में पीएनजी प्रारूप में .ico फाइलों का समर्थन करता है। क्या यह आपके लिए काम करता है? http://blogs.msdn.com/b/oldnewthing/archive/2010/10/22/10079192.aspx – MerickOWA

+0

जब तक .NET में कुछ उपयोगिता/फ़ंक्शन नहीं है, तब तक मैं एक पीएनजी से .ico बनाने के लिए उपयोग कर सकता हूं उड़ो ... जानना अच्छा है, थो। – devios1

+0

@chaiguy क्या आपने WPF सिस्टम ट्रे सामग्री करने के लिए http://www.hardcodet.net/projects/wpf-notifyicon का उपयोग करने पर देखा है? – MerickOWA

उत्तर

6

आप

Icon.FromHandle(image.GetHIcon()) 

You'll need to explicitly destroy the icon when you're done with it लिख सकते हैं:

[DllImport("user32.dll", CharSet = CharSet.Auto)] 
extern static bool DestroyIcon(IntPtr handle); 

DestroyIcon(newIcon.Handle); 
+0

पूरी तरह से ऑफ-विषय यहां, लेकिन मॉडरेटर चुनाव पर बधाई, @SLaks! –

+0

यहां समस्या यह है कि GetHIcon() बिटमैप का एक तरीका है, छविसोर्स नहीं, और एक छवि स्रोत से बिटमैप प्राप्त करने का कोई भी तरीका नहीं दिखता है - एक विधि जिसे मैंने पाया (जो लगभग 20 लाइन लंबी थी) पीएनजी पारदर्शिता को सुरक्षित नहीं करता है। – devios1

1

मैं इस ~ की तलाश में हूँ यहाँ एक है, लेकिन बहुत अच्छा नहीं!

 Icon icon; 
     Image source = Image.FromFile(picturefile, true); 

     Bitmap target = new Bitmap(iconsize, iconsize, 
      System.Drawing.Imaging.PixelFormat.Format32bppArgb); 

     Graphics g = Graphics.FromImage(target); 
     g.DrawImage(source, 0, 0, iconsize, iconsize); 

     //target.Save("c:\\temp\\forest.bmp"); 

     icon = Icon.FromHandle(target.GetHicon()); 

     FileStream fs = File.Create(iconfile); 
     icon.Save(fs); 
     fs.Close(); 

     icon.Dispose(); 
     target.Dispose(); 
     source.Dispose();