![]() |
RGB -- TColor allgemeine Verständnisfrage
Hey Leute,
ich habe zwar alle Funktionen zum Umwandeln von RGB zu Tcolor und umgekehrt gefunden, jedoch interessiert es mich, was da genau passiert ?! Quelle: Beitrag von Sakura procedure TColor2RGB(const Color: TColor; var R, G, B: Byte); begin // convert hexa-decimal values to RGB R := Color and $FF; G := (Color shr 8) and $FF; B := (Color shr 16) and $FF; end; Ich verstehe nicht ganz, was dieses $FF aussagt. Ich weiß zwar, dass es für 255 steht, aber warum wird dies für alle Farben zusätzlich gemacht ? Handelt es sich um eine Umwandlungsform in Byte oder was genau passiert wenn ich "and $FF" durchführe. Stehe grad wirklich etwas auf dem Schlauch, würde mich freuen wenn es einer einfach erklären könnte. danke :) |
AW: RGB -- TColor allgemeine Verständnisfrage
Hallo,
and $FF maskiert den TColor Wert auf ein Byte. TColor ist ein 4 Byte Type. z.B. Color xxBBGGRR color shr 8 -> yyxxBBGG and $FF = GG Grüße Klaus |
AW: RGB -- TColor allgemeine Verständnisfrage
Zitat:
![]() ![]() |
AW: RGB -- TColor allgemeine Verständnisfrage
okay danke für die schnellen Antworten.
Eines Verstehe ich jedoch nicht ganz, warum gehe ich shr 8 und nicht shl8, denn die byte Palette wird ja von rechts nach links gezählt. Sorry für die blöden Fragen^^ |
AW: RGB -- TColor allgemeine Verständnisfrage
TColor ist im Format BGR, deshalb wird nach rechts geshiftet.
|
AW: RGB -- TColor allgemeine Verständnisfrage
danke danke danke:) alles gecheckt:)
|
AW: RGB -- TColor allgemeine Verständnisfrage
Da R, G und B in TColor2RGB als Byte deklariert sind,
könnte man das
Delphi-Quellcode:
auch weglassen, da auch ohne dieses durch das Byte der Wertebereich begrenzt wird,
and $FF
aber schalte man nun mal die Bereichsprüfung in den Projektoptionen an, dann würde es knallen, da Delphi dann bei Zuweisung an das Byte den Wertebereich prüfen würde. |
AW: RGB -- TColor allgemeine Verständnisfrage
![]() |
AW: RGB -- TColor allgemeine Verständnisfrage
Recht angenehm geht der Zugriff so
Delphi-Quellcode:
Type
TColorAcc = packed record Red: Byte; Green: Byte; Blue: Byte; Alpha: Byte; end; procedure Beispiel; var C:TColor; begin TColorAcc(c).Blue := $ff; end; |
AW: RGB -- TColor allgemeine Verständnisfrage
Dann doch gleich so:
Delphi-Quellcode:
;)
Type
TColorAcc = packed record case Boolean of true: Color: TColor; false: begin Alpha: Byte; Blue: Byte; Green: Byte; Red: Byte; end; end; procedure Beispiel; var C:TColorAcc; begin c.Color := clBlue; c.Red := 255; // c.Color=clFuchsia end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:52 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