2011-11-17 14 views
16

मैं आइकन में बिटमैप कन्वर्ट करने के लिए कोशिश कर रहा हूँ आइकन में बदलें। लेकिन उसके एवज में फ़ाइल के रूप में कुछ त्रुटि बस खाली है वहाँ है।बिटमैप

private void btnCnvrtSave_Click(object sender, EventArgs e) 
{ 
    Bitmap bmp = new Bitmap(sourseFile); //sourseFile = openfiledialog.FileName; 
    IntPtr Hicon = bmp.GetHicon(); 
    Icon myIcon = Icon.FromHandle(Hicon); 

    SaveFileDialog sfd = new SaveFileDialog(); 
    sfd.Title = "Save Icon"; 
    sfd.Filter = "Icon|*.ico"; 
    sfd.ShowDialog(); 

    FileStream fileStream = new FileStream(sfd.FileName, FileMode.OpenOrCreate); 
    myIcon.Save(fileStream); 
    fileStream.Flush(); 
    fileStream.Close(); 

    MessageBox.Show("Image is converted successfully!"); 

    //Process.Start(sfd.FileName); 
} 

मैंने समस्या को समझने के लिए बहुत कुछ करने की कोशिश की है लेकिन नहीं कर सका। कृपया मुझे बताओ जहां समस्या है।

+2

आप जांच की है कि 'myIcon' मान्य डेटा होता है? – ChrisF

+0

इस कोड मेरे लिए सफलतापूर्वक चलाने के लिए और मुझे एक आइकन, जहां यह आपकी समस्या है दे सकता है? –

+0

कृपया यहां पर एक नज़र डालें http://www.codeproject.com/KB/GDI-plus/safeicon.aspx –

उत्तर

3

इस कोड के साथ एकमात्र समस्या यह है कि यह 128x128 तक बिटमैप छवियों का समर्थन करता है।

बिटमैप का आकार अधिक होने पर यह रिक्त आईसीओ फ़ाइल उत्पन्न करता है।

6

यह आलेख वर्णन करता है कि किसी बिटमैप को आइकन में कैसे परिवर्तित करें।

http://www.go4expert.com/forums/showthread.php?t=19250

यह अपने एक करने के लिए बहुत समान दिखता है:

using (Cbitmap = new Bitmap(sourceImage.Text)) 
{ 
    Cbitmap.MakeTransparent(Color.White); 
    System.IntPtr icH = Cbitmap.GetHicon(); 
    Icon ico = Icon.FromHandle(icH); 
} 
using (System.IO.FileStream f = new System.IO.FileStream(destinationFldr.Text + "\\image.ico", System.IO.FileMode.OpenOrCreate)) 
{ 
    ico.Save(f); 
} 

इसे आजमाएं।

संपादित: उपयोग कथन जोड़ा गया।

2

इसके अलावा, यह SO questionhow to convert an image to an icon से जुड़ा हुआ है, जो आपको सही दिशा में ले जा सकता है।

नोटिस, हालांकि, लिखित कोड को हैंडल रिसाव से बचने के लिए संशोधित करने की आवश्यकता है। लेकिन solution भी है कि प्रश्न में जुड़ा हुआ है।

9

कृपया, GetHicon के बाद DestroyIcon उपयोग करते हैं, स्मृति रिसाव

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

MSDN को रोकने के लिए: https://msdn.microsoft.com/en-us/library/system.drawing.bitmap.gethicon%28v=vs.110%29.aspx

+0

मेरा आइकन है।() पर्याप्त है या क्या आपको जो करना है, उसे करना है? – farukdgn

+0

@farukdgn नहीं, यह पर्याप्त नहीं है ... – Nigrimmist

+0

वहाँ यह करने के लिए एक पोर्टेबल रास्ता नहीं है? –

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