Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   RGB -- TColor allgemeine Verständnisfrage (https://www.delphipraxis.net/157073-rgb-tcolor-allgemeine-verstaendnisfrage.html)

p3ter 28. Dez 2010 10:59

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 :)

Klaus01 28. Dez 2010 11:02

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

Alien426 28. Dez 2010 11:17

AW: RGB -- TColor allgemeine Verständnisfrage
 
Zitat:

Zitat von p3ter (Beitrag 1070754)
was genau passiert wenn ich "and $FF" durchführe?

Die beiden Werte werden mittels Konjunktion (siehe auch Boolesche Algebra) verknüpft.

p3ter 28. Dez 2010 11:27

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^^

DeddyH 28. Dez 2010 11:30

AW: RGB -- TColor allgemeine Verständnisfrage
 
TColor ist im Format BGR, deshalb wird nach rechts geshiftet.

p3ter 28. Dez 2010 11:35

AW: RGB -- TColor allgemeine Verständnisfrage
 
danke danke danke:) alles gecheckt:)

himitsu 28. Dez 2010 11:51

AW: RGB -- TColor allgemeine Verständnisfrage
 
Da R, G und B in TColor2RGB als Byte deklariert sind,
könnte man das
Delphi-Quellcode:
and $FF
auch weglassen, da auch ohne dieses durch das Byte der Wertebereich begrenzt wird,
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.

stahli 28. Dez 2010 14:06

AW: RGB -- TColor allgemeine Verständnisfrage
 
Hier hatte ich auch einmal ein paar Infos zusammengetragen.

Bummi 28. Dez 2010 16:51

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;

Medium 28. Dez 2010 18:48

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 06:45 Uhr.
Seite 1 von 2  1 2      

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