![]() |
TColor in TAlphaColor unwandeln
Hallo zusammen,
ich habe in einer Datenbank zu einem Datensatz auch eine Farbe (TColor) als Integer gespeichert. In FireMonkey sind die Farben als TAlphaColor angelegt. Dabei ist Rot und Grün vertauscht wegen BigEndian oder LittleEndian. Stellt Delphi eine Methode zur Verfügung um aus einem TColor in ein TAlphaColor zu konvertieren? In diesem Zusammenhang funktioniert auch ColorToRGB nicht.
Delphi-Quellcode:
Egal welche Farbe ich übergebe, wird immer eine Exception gefeuert "Access Violation".
TAlphaColors.ColorToRGB($FF0000);
Das Ziel ist den Integer für die Farbe(TColor) zu konvertieren in TAlphaColor damit die Android App die Farbein gleich anzeigt wie in der Win32 Anwendung. Gruß Kostas |
AW: TColor in TAlphaColor unwandeln
Mit TAlphaColorRec kannst man auf die einzelnen Farbkomponenten direkt zugreifen.
|
AW: TColor in TAlphaColor unwandeln
In System.UIConsts.pas gibt es eine
Delphi-Quellcode:
, die ist aber nicht typsicher.
function RGBtoBGR
Alternativ schreibst du dir selber was:
Delphi-Quellcode:
function ColorToAlphaColor(Value: TColor): TAlphaColor;
var CRec: TColorRec; ARec: TAlphaColorRec; begin CRec.Color := Value; ARec.A := CRec.A; ARec.B := CRec.B; ARec.G := CRec.G; ARec.R := CRec.R; Result := ARec.Color; end; |
AW: TColor in TAlphaColor unwandeln
BigEndian/LittleEndian hat hier erstmal garkeinen Einfluss.
Die Werte der Farben, als Integer/TColor sind immer gleich. Nur die darunterliegendesn "Einzelbytes" sind in einer anderen Reihenfolge.
Delphi-Quellcode:
Der Unterschied ist einfach ein anderes
TColorRec = record
const ... Blue = TColor($FF0000); // bleibt immer gleich ... case LongWord of 0: (Color: TColor); 2: (HiWord, LoWord: Word); // :gruebel: Hmmm, müsste man das nicht eigentlich auch umdrehen? 3: {$IFDEF BIGENDIAN} (A, B, G, R: System.Byte); {$ELSE} (R, G, B, A: System.Byte); {$ENDIF} end; TAlphaColorRec = record const ... Alpha = TAlphaColor($FF000000); Blue = Alpha or TAlphaColor($0000FF); ... case LongWord of 0: (Color: TAlphaColor); 2: (HiWord, LoWord: Word); 3: {$IFDEF BIGENDIAN} (A, R, G, B: System.Byte); {$ELSE} (B, G, R, A: System.Byte); {$ENDIF} end; ![]() TAlphaColor hat z.B. die selbe RGB-Byte-Folge, wie im HTML/CSS. Ich konnte nirgendwo die Definition von TAlphaColorRec.ColorToRGB finden. Wenn wessen Integer-Rückgabe mit dem Ergebnis von TColorRec.ColorToRGB übereinstimmt, dann könnte man diese für die Konvertierung benutzen. Ansonsten kann man natürlich ganz einfach TColorRec.B an TAlphaColorRec.B zuweisen usw., aber es wäre echt voll dämlich, wenn man hier keine Konvertierungsfunktion eingebaut hätte. (auch wenn ich noch keine gefunden hab :stupid:) [edit] Zitat:
Und ja, vorher müsste man (zumindestens im Windows) noch ColorToRGB durchlaufen. ![]() |
AW: TColor in TAlphaColor unwandeln
Danke für den Hinweis System.UIConsts
Nur die Methode RGBtoBGR stellt die Farben richtig dar auf ein Windows und auf Android OS.
Delphi-Quellcode:
Dankeschön nochmal.
uses System.UIConsts;
... Rectangle1.Fill.Color := RGBtoBGR($FF000000 + 255); //FF; Rectangle2.Fill.Color := RGBtoBGR($FF000000 + 65280); //FF00; Rectangle3.Fill.Color := RGBtoBGR($FF000000 + 16711680); //FF0000; Gruß Kostas |
AW: TColor in TAlphaColor unwandeln
Zitat:
Für TColorRec.ColorToRGB gibt es allerdings eine Implementation in VCL.Graphics. |
AW: TColor in TAlphaColor unwandeln
Jupp.
Dachte schon ich hätte die ColorToRGB-Funktion für TAlphaColorRec übersehn. :stupid: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:14 Uhr. |
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