Einzelnen Beitrag anzeigen

Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#7

AW: 32bit TBitmap nach dem SPeichern ohne Alphachannel?

  Alt 3. Jul 2014, 09:45
Bei einem Icon hätte ich jetzt gesagt, dass dies eher an den Spezifikationen des ICO Formats liegt, dass die BMP Datenstruktur mit benutzt. Aber ich muss mich teilweise korrigieren:

Zitat von Wikipedia:
An integrated alpha channel has been introduced with the undocumented BITMAPV3INFOHEADER and with the documented BITMAPV4HEADER (since Windows 95) and is used within Windows XP logon and theme system as well as Microsoft Office (since v2000); it is supported by some image editing software, such as Adobe Photoshop since version 7 and Adobe Flash since version MX 2004 (then known as Macromedia Flash). It is also supported by GIMP, Google Chrome, Microsoft PowerPoint and Microsoft Word.

For compatibility reasons, most applications use the older DIB headers for saving files. With OS/2 not more supported after Windows 2000, for now the common Windows format is the BITMAPINFOHEADER header.
Der fette Teil dürfte aber, auch wenn diese Erweiterung offenbar prinzipiell existiert, das Problem mit dem Speichern unter Delphi sein. Ich gehe ganz stark davon aus, dass dort auch die alten DIB Header zum Einsatz kommen.
Wenn es also BMP sein muss, dann müsstest du entweder eine Lib auftun, die die neuen Header nutzt (ich kenne spontan keine), oder das Speichern selber implementieren. Vielleicht kann GDI+ da auch was, aber die ist eigentlich abgekündigt. Und immer damit rechnen, dass andere Programme von der Transparenz nichts sehen, oder gar mit dem ganzen Bild nichts mehr anfangen können. (Die oben genannten gehen ja zumindest schon mal.)

Edit: Ich habe auch schon Probleme mit Delphis TBitmap bekommen, wenn dort Alpha mit enthalten sein sollte. Wenn ich mich richtig erinnere, zerschießen manche API Funktionen den Kanal ab und zu. Ich würde daher eher voll auf eine Lib wie die Bei Google suchenGraphics32 setzen, oder aber zumindest GDI+, welche beide voll "Alpha-Aware" sind.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)

Geändert von Medium ( 3. Jul 2014 um 09:49 Uhr)
  Mit Zitat antworten Zitat