2012-01-05 6 views
8

voglio usare il immagine 4th dal file ico: C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\VS2008ImageLibrary\1033\VS2008ImageLibrary\VS2008ImageLibrary\Objects\ico_format\WinVista\Hard_Drive.icoCome si può accedere ad icone da un file multi-icona (.ico) con indice in C#

Se vedo questa icona utilizzando Visualizzatore foto di Windows , mi mostra 13 icone diverse.

Ho scaricato questo ico in un file di risorse, come posso recuperare l'icona richiesta utilizzando l'indice.

risposta

6

In WPF, si può fare qualcosa di simile:

Stream iconStream = new FileStream (@"C:\yourfilename.ico", FileMode.Open); 
IconBitmapDecoder decoder = new IconBitmapDecoder ( 
     iconStream, 
     BitmapCreateOptions.PreservePixelFormat, 
     BitmapCacheOption.None); 

// loop through images inside the file 
foreach (var item in decoder.Frames) 
{ 
    //Do whatever you want to do with the single images inside the file 
    this.panel.Children.Add (new Image() { Source = item }); 
} 

// or just get exactly the 4th image: 
var frame = decoder.Frames[3]; 

// save file as PNG 
BitmapEncoder encoder = new PngBitmapEncoder(); 
encoder.Frames.Add(frame); 
using (Stream saveStream = new FileStream (@"C:\target.png", FileMode.Create)) 
{ 
    encoder.Save(saveStream); 
} 
5

Avrete bisogno di analizzare manualmente il file .ico afferrando le informazioni dall'intestazione (vedi here per un layout del tipo di file .ico).

C'è un open source project su vbAccelerator (non ti preoccupare è in realtà il codice C#, non VB) che utilizza l'API Win32 per estrarre icone da risorse (exe, dll e anche ico, che è quello che stai cercando di fare). Potresti usare quel codice o esaminarlo per una buona idea di come è fatto. Il codice sorgente può essere sfogliato here.

Problemi correlati