Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi 32-Bit Farbe - Das letzte Byte missbrauchen?! (https://www.delphipraxis.net/107158-32-bit-farbe-das-letzte-byte-missbrauchen.html)

SirThornberry 23. Jan 2008 18:26

Re: 32-Bit Farbe - Das letzte Byte missbrauchen?!
 
dort prüft er nur. Ich vermisse aber die Stelle wo er den Wert in das Bitmap rein schreibt. Zu Beginn der Funktion sehe ich nur das er die Farbtiefe des Bitmaps setzt. Wenn das Bitmap zu dem Zeitpunkt 24bit Farbtiefe hat braucht er nicht auf den Wert zu prüfen (da dann überall der gleiche Wert steht) und wenn das bitmap zu diesem Zeitpunkt 32bit Farbtiefe hat ist die Anweisung nicht notwendig. Er sollte eher eine Prüfung einbauen ob überhaupt ein 32bit Bitmap vorliegt :-)

Medium 24. Jan 2008 01:01

Re: 32-Bit Farbe - Das letzte Byte missbrauchen?!
 
Zitat:

Zitat von Neutral General
Jetzt lade ich ein 32-Bit-Bitmap in ein Image und dann:

Delphi-Quellcode:
Image1.Picture.Bitmap.Canvas.Brush.Color := $0ABBBBBB;
Image1.Picture.Bitmap.Canvas.FillRect(Rect(50,50,100,100));
AlphaFloodFill(Image1.Picture.Bitmap,clgreen,$0A);

Daaa soll das 4. Byte beschrieben werden, und jo, ich verwechsel das mit dem Typ TColor, weil Canvas.Brush zumindest bei mir vom Typ TColor ist. Und ja, er ist sich, wenn man mal ganz aufmerksam liest, offenbar sicher ein 32-Bit Bitmap vor sich zu haben.

Neutral General 24. Jan 2008 12:36

Re: 32-Bit Farbe - Das letzte Byte missbrauchen?!
 
Hi,

Ja ich habe ein 32-Bit Bitmap. 100%ig. Das setzen des Pixelformats auf 32-Bit war nur eher aus Sicherheit...
Die stellen an denen ich das 4. Byte missbrauchen will sind wie gesagt:

Delphi-Quellcode:
if p^.rgbReserved = Code then // <---
und

Delphi-Quellcode:
Image1.Picture.Bitmap.Canvas.Brush.Color := $-->0A<--BBBBBB;
Es scheint aber leider so nicht zu funktionieren. Ich habe aber mittlerweile eine ganz gute andere Methode gefunden. Also schon mit der Ausnutzung des 4. Bytes. Aber da man das nur mit Scanline kann, erstelle ich mir vorher eine Art Maske nach der dann per Scanline je nach Bedarf das 4. Byte beschrieben wird.

Gruß
Neutral General

Muetze1 24. Jan 2008 12:42

Re: 32-Bit Farbe - Das letzte Byte missbrauchen?!
 
Zitat:

Zitat von Neutral General
Delphi-Quellcode:
Image1.Picture.Bitmap.Canvas.Brush.Color := $-->0A<--BBBBBB;

Ok, das war für mich so abwägig, dass ich dies gar nicht oben gesehen habe. Somit hat Medium natürlich vollkommen Recht. Du benutzt die Brush Color und das ist ein TColor und wird immer erst nach einer Umwandlung der dahinterliegenden WinAPI GDI Befehlen zugeführt. Diese Umwandlung sorgt sich um die Konstanten (clXXX) sowie um die Farbanpassung der Farbe an den Kontext. Dafür benötigt die VCL Informationen wie sie damit umzugehen hat und diese legt sie im TColor Typ im obersten Byte ab. Alle VCL TCanvas Funktionen werden dir niemals das 4. Byte in die ScanLine Informationen schreiben.

Afair geht die WinAPI GDI auch sträflich mit dem 4. Byte um und erst mit den GDI+ Funktion sind diese sorgsamer mit diesem Byte, weil es dort als AlphaKanal genutzt wird.

Kurzum: Du musst dein 4. Byte pro Pixel immer per Hand selbst beschreiben. Jede VCL Funktion wird die dort abgelegten Informationen zerstören.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:45 Uhr.
Seite 2 von 2     12   

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