2009-07-06 9 views
3

Ich gebunden SHGetFileInfo und ExtractIconEx, beide zurück ein normales 32x32-Symbol und 16x16 mit nur 16 Farben, und es sieht schrecklich aus. Wie extrahiere ich ein vollfarbiges Symbol? Ein korrektes 16x16-Symbol extrahieren, das einer Datei zugewiesen ist?

Mein Code

SHFILEINFO shinfo = new SHFILEINFO(); 
IntPtr hImgSmall = SHGetFileInfo(fileName, 0, ref shinfo, (uint)Marshal.SizeOf(shinfo), SHGFI_ICON | SHGFI_SMALLICON); 
Icon icon = (Icon)System.Drawing.Icon.FromHandle(shinfo.hIcon).Clone(); 
DestroyIcon(shinfo.hIcon); 
+0

Sind Sie sicher, dass Sie Datei versucht kleines Symbol hat die volle Farbe 16x16 icon zu extrahieren? – arbiter

+0

Zumindest der Windows Explorer zeigt es an. http://img196.imageshack.us/i/iconsdys.png/ – alx

+0

Das ist seltsam, es muss funktionieren, zumindest funktioniert es in meinem Fall. Sie brauchen unbedingt Icon, oder Image ist auch akzeptabel? – arbiter

Antwort

4

Ich habe versucht, dieses Beispiel link text und arbeitet ..... bekam 16 * 16 mit Alpha-Kanal. Probieren Sie es aus.

+0

Bestätigen Sie, dass das funktioniert. Anscheinend müssen Sie ToBitmap() aufrufen, sonst erhalten Sie nur 16 Farben! Danke, – MickyD

+1

Wow, das ist das einzige, das ich zur Arbeit bekommen kann. aus wie die 20, die ich bei Google gefunden habe. Dieser eine Regeln! – Omzig

2

Haben Sie Folgendes versucht?

Icon LargeIcon = Icon.ExtractAssociatedIcon(fileName); 
Icon SmallIcon = new Icon(LargeIcon, 16, 16); 
+0

Ein extrahiertes Symbol hat die einzige Bitmap, so dass es nur das Bild verzerrt. – alx

+0

funktioniert nicht, noch 16 Farben – MickyD