AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi 32-Bit Farbe - Das letzte Byte missbrauchen?!
Thema durchsuchen
Ansicht
Themen-Optionen

32-Bit Farbe - Das letzte Byte missbrauchen?!

Ein Thema von Neutral General · begonnen am 23. Jan 2008 · letzter Beitrag vom 24. Jan 2008
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#11

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

  Alt 23. Jan 2008, 19:26
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
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Medium

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

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

  Alt 24. Jan 2008, 02:01
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.
"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)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#13

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

  Alt 24. Jan 2008, 13:36
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:

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

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
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#14

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

  Alt 24. Jan 2008, 13:42
Zitat von Neutral General:
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:46 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