2011-11-17 13 views
16

Sto cercando di convertire la bitmap in icona. Ma c'è qualche errore dato che il file risultante è solo vuoto.Converti bitmap all'icona

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

Ho provato molto a capire il problema ma non ci sono riuscito. Per favore dimmi dove si trova il problema.

+2

Avete controllato che 'myIcon' contiene dati validi? – ChrisF

+0

questo codice viene eseguito correttamente per me e mi fornisce un'icona, dove è il tuo problema? –

+0

pls dai un'occhiata qui http://www.codeproject.com/KB/GDI-plus/safeicon.aspx –

risposta

3

L'unico problema con questo codice è che supporta immagini bitmap fino a 128x128.

Produce un file ico vuoto se la dimensione della bitmap è maggiore.

6

In questo articolo viene descritto come convertire una bitmap in un'icona.

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

sembra molto simile al vostro uno:

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

provarlo.

MODIFICATO: aggiunte le istruzioni using.

2

Inoltre, questo SO question collega a how to convert an image to an icon, che può portare nella giusta direzione.

Si noti, tuttavia, che il codice come scritto deve essere modificato per evitare una perdita di handle. Ma il solution è anche collegato in quella domanda.

Problemi correlati