Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Icon erstellen mit CreateBitmap bzw. CreateDIBitmap (https://www.delphipraxis.net/170672-icon-erstellen-mit-createbitmap-bzw-createdibitmap.html)

Zacherl 28. Sep 2012 10:01

Icon erstellen mit CreateBitmap bzw. CreateDIBitmap
 
Hallo zusammen,

es ist mal wieder soweit: Und zwar habe ich ein Problem mit der super schönen GDI Funktion CreateDIBitmap (mal wieder).

Ich habe mir eine Routine geschrieben, mit der ich eine Icon Datei parsen und alle Einzelbitmaps extrahieren kann. Die Daten liegen dann in der Form eines TBitmapInfoHeader Structs inklusive der eigentlichen Bilddaten vor.

Nun möchte ich die Funktionalität der LoadIcon API implementieren. Sprich: ich übergebe die gewünschten Maße und erhalte dann ein HICON, welches ich auf ein beliebiges Canvas zeichnen kann. Soweit die Theorie.

Mein erster Ansatz war CreateBitmap mit anschließendem CreateIconIndirect. Das funktionierte bei meinem ersten Testicon überraschend gut. Dann jedoch hatte ich andere Icons, die entweder komplett schwarz waren oder auf dem Kopf standen.

Bei meinen Recherchen im Internet bin ich auf die CreateDIBitmap Funktion gestoßen, welche sich zumindest um die bottom up Images selbst kümmern sollte. Das Problem ist, das hierbei mein umgedrehtes Testicon ein 0 Handle verursacht (GetLastError ist aber ebenfalls 0). Die Icons die vorher schwarz waren, werden nun total verzerrt und falschfarbig dargestellt.

Der CreateDIBitmap API übergebe ich momentan einfach exakt den Info Header, den ich vorher aus der Icon Datei ausgelesen hatte.

Hat jemand sowas ähnliches vielleicht schonmal gemacht und kann mir etwas auf die Sprünge helfen?

Viele Grüße
Zacherl

Zacherl 28. Sep 2012 11:29

AW: Icon erstellen mit CreateBitmap bzw. CreateDIBitmap
 
Edit: Die falschen Farben liegen wohl daran, dass meine Palette nicht korrekt übernommen wird. Nach 3 Stunden rumprobieren habe ich jetzt allerdings die CreateIconFromResourceEx API entdeckt, mit der man mein Vorhaben ganz einfach realisieren kann.

Die fertige Unit zum Laden und Speichern von Icons aus und in Icon Dateien oder Resourcen, habe ich mal in der CodeLib gepostet:
http://www.delphipraxis.net/170682-l...ml#post1184833


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:08 Uhr.

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