Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi HICON: Vom Handle zum Struct und umgekehrt (https://www.delphipraxis.net/159942-hicon-vom-handle-zum-struct-und-umgekehrt.html)

Zacherl 19. Apr 2011 16:38

HICON: Vom Handle zum Struct und umgekehrt
 
Hey,

ich habe mir eine kleine Unit geschrieben, welche Icons aus einer EXE extrahieren und als Icon speichern kann. Ebenso kann ich eine Icon Resource anhand einer Icon Datei einer EXE hinzufügen. Intern verwende ich folgende Strukturen:
Delphi-Quellcode:
// RESOURCE ICON HEADER

type
  PResIconEntry = ^TResIconEntry;
  TResIconEntry = packed record
    bWidth:          Byte;
    bHeight:         Byte;
    bColorCount:     Byte;
    bReserved:       Byte;
    wPlanes:         Word;
    wBitCount:       Word;
    dwBytesInRes:    DWord;
    nID:             Word;
  end;

  PGroupIconHeader = ^TGroupIconHeader;
  TGroupIconHeader = packed record
    idReserved:      Word;
    idType:          Word;
    idCount:         Word;
    idEntries:       Array[0..31] of TResIconEntry;
  end;

// FILE ICON HEADER

type
  PIconEntry = ^TIconEntry;
  TIconEntry = packed record
    bWidth:          Byte;
    bHeight:         Byte;
    bColorCount:     Byte;
    bReserved:       Byte;
    wPlanes:         Word;
    wBitCount:       Word;
    dwBytesInRes:    DWord;
    dwImageOffset:   DWord;
  end;

  TPageInfo = packed record
    Width:           Byte;
    Height:          Byte;
    ColorQuantity:   Integer;
    Reserved:        DWord;
    PageSize:        DWord;
    PageOffSet:      DWord;
  end;

  TIcoFileHeader = packed record
    FileFlag:        Array[0..3] of Byte;
    PageQuartity:    Integer;
    PageInfo:        TPageInfo;
  end;

  PIconHeader = ^TIconHeader;
  TIconHeader = packed record
    idReserved:      Word;
    idType:          Word;
    idCount:         Word;
    idEntries:       Array[0..0] of TIconEntry;
  end;
Ich zeige die extrahierten Icons in einem ListView an. Nun möchte ich allerdings gerne den Weg über die Festplatte und LoadImage() vermeiden. Weiß also jemand, wie ich meine Structs nun zu einem HICON konvertieren könnte und umgekehrt?

Viele Grüße
Zacherl

chaosben 19. Apr 2011 16:56

AW: HICON: Vom Handle zum Struct und umgekehrt
 
Wo sind denn die eigentlichen Bilddaten in deinen Strukturen? Ich finde sie nicht.
Wenn die nicht da sind, wird schwierig. ;)
Wenn doch, dann gibts bestimmt einen Weg.

Zacherl 19. Apr 2011 17:40

AW: HICON: Vom Handle zum Struct und umgekehrt
 
An die Bilddaten kann ich rankommen. Die Structs führen mich da über ImageOffset etc. zu den eigentlichen Bilddaten.

chaosben 19. Apr 2011 19:43

AW: HICON: Vom Handle zum Struct und umgekehrt
 
Und in welchem Format kannst du die Daten liefern?

Ich stell so viele Fragen, weil ich mal was ähnliches gemacht habe ... ein PNG in ein Icon gewandelt via MSDN-Library durchsuchenCreateIconIndirect.
Da gibt man eine Icon-Struktur an und bekommt ein HICON hinten raus.
In der Icon-Struktur steckt ein Bitmap und ein paar andere Infos. Das Bitmap müsste man mit den Bilddaten von dir füttern.

Zacherl 20. Apr 2011 07:37

AW: HICON: Vom Handle zum Struct und umgekehrt
 
Die Funktion sieht auf jeden Fall mal vielversprechend aus. Die einzelnen Icons (Icongrößen) sind soweit ich weiß Bitmaps mit Alpha Channel. Von denen komme ich auf jeden Fall an die RAW Daten aus einem Buffer.

Dann lautet die nächste Frage nun, wie ich das ByteArray vom Bitmap in ein HBITMAP umwandeln kann :D Ich habe grade noch die MSDN-Library durchsuchenCreateBitmapIndirect API gefunden, die recht gut geeignet scheint.

Ich probiere mal aus, ob ich im Laufe des Tages da was Ordentliches gebastelt bekomme und gebe dann Rückmeldung.

Noch eine Verständnisfrage: Besitzt ein HICON jeweils nur ein Bild? In einer Icon Datei sind ja mehrere Bilder in verschiedenen Farbtiefen und Auflösungen gespeichert.

chaosben 20. Apr 2011 07:46

AW: HICON: Vom Handle zum Struct und umgekehrt
 
Wenn du willst, kannst du dir auch die PNGtoIcon aus dieser Unit anschauen ... das ist so in etwa das gleiche, was du auch machen willst.

Thom 20. Apr 2011 11:13

AW: HICON: Vom Handle zum Struct und umgekehrt
 
Vielleicht helfen GetIconInfo bzw. GetIconInfoEx?

Zacherl 20. Apr 2011 17:03

AW: HICON: Vom Handle zum Struct und umgekehrt
 
Ich habs jetzt ganz einfach gelöst. Mein Ziel war es lediglich Icons aus einer DLL in einem ListView anzuzeigen. MSDN-Library durchsuchenLoadImage bietet genau die Funktionalität, die ich benötige und liefert mir direkt ein HICON :roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz