2012-01-05 13 views
8

chcę użyć 4th obraz z z pliku ico: C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\VS2008ImageLibrary\1033\VS2008ImageLibrary\VS2008ImageLibrary\Objects\ico_format\WinVista\Hard_Drive.icoJak można uzyskać dostęp do ikony z pliku Wielu ikony (.ico) stosując wskaźnik w C#

Jeśli widzę tę ikonę za pomocą programu Windows Photo Viewer , pokazuje mi 13 różnych ikon.

Porzuciłem to ico w pliku zasobów, w jaki sposób mogę odzyskać wymaganą ikonę za pomocą indeksu.

Odpowiedz

6

W WPF, można zrobić coś takiego:

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

Musisz ręcznie przeanalizować informacje o przechwytywaniu plików .ico z nagłówka (zobacz here dla układu typu pliku .ico).

Jest open source project na vbAccelerator (nie martw się, to jest kod C#, nie VB), który używa Win32 API do wyodrębniania ikon z zasobów (exe, dll, a nawet ico, co jest tym czego szukasz). Możesz użyć tego kodu lub przejść przez niego, aby dobrze zrozumieć, jak to się robi. Kod źródłowy można przeglądać here.