2012-01-05 5 views
8

Quiero usar el cuarta imagen desde el archivo ico: C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\VS2008ImageLibrary\1033\VS2008ImageLibrary\VS2008ImageLibrary\Objects\ico_format\WinVista\Hard_Drive.ico¿Cómo se puede acceder a los iconos de un archivo multi-icono (.ico) utilizando el índice en C#

Si veo este icono se utiliza Windows Photo Viewer , me muestra 13 iconos diferentes.

He descargado este ico en un archivo de recursos, ¿cómo puedo recuperar el ícono requerido usando el índice?

Respuesta

6

En WPF, puede hacer algo como esto:

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

Tendrá que analizar manualmente a través de la información de captura de archivos .ico desde el encabezado (consulte here para obtener un diseño del tipo de archivo .ico).

Hay una fuente abierta project en vbAccelerator (no se preocupe en realidad es el código C#, no VB) que utiliza la API de Win32 para extraer iconos de recursos (EXE, DLL e incluso ico, que es lo que está buscando hacer) Podrías usar ese código o ir a través de él para tener una buena idea de cómo se hace. El código fuente se puede examinar here.

Cuestiones relacionadas