Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TColor zu RGBW Hex? (https://www.delphipraxis.net/159915-tcolor-zu-rgbw-hex.html)

Muellermilchtrinker 18. Apr 2011 16:02

Delphi-Version: 2009

TColor zu RGBW Hex?
 
Hallo DP,

ich verwende einen TColorDialog um eine Farbe fest zu legen. Mit ColorToString bekomme ich meine Farbe im Format: $AABBCCDD
jedoch bekomme ich auch clRed. Kann ich Delphi irgendwie beibringen mir immer den Hexwert als RGBW zu geben? RGBW ist dabei wichtig

shmia 18. Apr 2011 16:12

AW: TColor zu RGBW Hex?
 
Nimm die Funktion
Delphi-Quellcode:
ColorToRGB(Color: TColor);

Namenloser 18. Apr 2011 16:53

AW: TColor zu RGBW Hex?
 
Ich weiß zwar nicht, was W sein soll, aber ich würde es mal so probieren:
Delphi-Quellcode:
Format('%.2x%.2x%.2x%.2x',[
  Color and $ff,
  (Color shr 8) and $ff,
  (Color shr 16) and $ff,
  Color shr 24
]);
Gegebenenfalls vorher ColorToRGB aufrufen, wenn du auch Systemfarben als RGB haben möchtest.

Muellermilchtrinker 29. Apr 2011 22:10

AW: TColor zu 8 stelliger Hex?
 
Ok, ich bin davon ausgegangen, dass bei der 8 stelligen Hex die amdere 2 Stellen für die Helligkeit stehen, aber ich kann mich auch täuschen.
Also was ich möchte ist folgendes: clRed, etc zu einer 8 stelligen Hex kopieren.
ColortoRGB funktioniert nicht, da ich dort nur 6 Stellen bekomme.

Namenloser 29. Apr 2011 22:13

AW: TColor zu 8 stelliger Hex?
 
Zitat:

Zitat von Muellermilchtrinker (Beitrag 1097738)
Ok, ich bin davon ausgegangen, dass bei der 8 stelligen Hex die amdere 2 Stellen für die Helligkeit stehen, aber ich kann mich auch täuschen.
Also was ich möchte ist folgendes: clRed, etc zu einer 8 stelligen Hex kopieren.
ColortoRGB funktioniert nicht, da ich dort nur 6 Stellen bekomme.

Und was gefällt dir an meinem Code nicht?

sx2008 29. Apr 2011 22:39

AW: TColor zu RGBW Hex?
 
Eine Farbe mit 24-Bit Auflösung lässt sich mit 3 Bytes darstellen.
Jeweils Rot, Grün und Blau haben dabei einen Wertebereich von 0..255, das entspricht einem Byte.
3 Byte lassen sich mit 6 Hexziffern kodieren.
Häufig geht man aber auf 4 Bytes, wobei das höchstwertige Byte immer gleich 0 ist oder als Alphakanal für Transparenz dient.
Innerhalb von Windows kann dieses 4 Byte auch eine Sonderbedeutung haben indem es auf eine Palettenfarbe hinweist.

Würde man im 4. Byte die Helligkeit kodieren (was nach deiner Vorstellung dem RGBW entspricht) wäre das eine redundanten Darstellung, da die Helligkeit ja schon über den gewichteten Durchschnitt von Rot-, Grün- und Blauanteil bestimmt ist.
In der Code-Library gibt es eine Funktion, die aus einer RGB - Farbe die Helligkeit errechnet.

Medium 29. Apr 2011 23:42

AW: TColor zu RGBW Hex?
 
:thumb: besser und vollständiger kann man RGB(X) kaum beschreiben!

Cirec 1. Mai 2011 10:24

AW: TColor zu RGBW Hex?
 
Hallo,

Hast du das jemals versucht?
Label1.Caption := HexDisplayPrefix + IntToHex(clRed, 8);

Muellermilchtrinker 2. Mai 2011 16:35

AW: TColor zu RGBW Hex?
 
Zitat:

Zitat von Cirec (Beitrag 1098014)
Hallo,

Hast du das jemals versucht?
Label1.Caption := HexDisplayPrefix + IntToHex(clRed, 8);

funktioniert! danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:25 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