Farbe aus Byte Variablen

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
neco
Beiträge: 2
Registriert: Fr 27. Sep 2013, 21:34

Farbe aus Byte Variablen

Beitrag von neco »

Ich habe Folgendes Problem:
Ich möchte aus 3 byte Variablen (a, b und c) eine Farbe erstellen, die sich dynamisch mit den Variablen mit ändert.
Wie kann ich die 3 Byte Zahlen in einen Rgb-Code umwandeln?
Ich danke für Hilfe.


PS: Ich bin ziemlicher Anfänger mit Lazarus (na gut, 1,5 Jahre) und bitte das zu berücksichtigen.

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Farbe aus Byte Variablen

Beitrag von Michl »

z.B. so:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  r,g,b:byte;
begin
  r:=$0;
  g:=$0;
  b:=$FF;
  Canvas.Pen.Color:=b shl 16 + g shl 8 + r;
  Canvas.Line(0, 0 ,ClientWidth, ClientHeight);
end; 

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

wp_xyz
Beiträge: 5189
Registriert: Fr 8. Apr 2011, 09:01

Re: Farbe aus Byte Variablen

Beitrag von wp_xyz »

In der Unit graphics, die praktisch in jedem Lazarus-Programm eingebunden wird, findest du die Funktion RgbToColor, oder du kannst auch die Funktion rgb aus LclIntf nehmen. In beiden gibst du die Rot, Grün, Blau-Bytes in dieser Reihenfolge an (bis max 255 natürlich), also RgbToColor(255, 0, 0) ist z.B. ein leuchtendes Rot.

Damit sparst du dir die Shift-Operationen aus Michl's Beitrag.

Code: Alles auswählen

 
uses
  LclIntf;  // für "rgb()",  oder "uses graphics" für RgbToColor
 
procedure TForm1.Button1Click(Sender: TObject);
var
  r,g,b:byte;
begin
  r:=$0;
  g:=$0;
  b:=$FF;
  Canvas.Pen.Color := rgb(r, g, b); // oder RgbToColor(r, g, b);
  Canvas.Line(0, 0 ,ClientWidth, ClientHeight);
end;

neco
Beiträge: 2
Registriert: Fr 27. Sep 2013, 21:34

Re: Farbe aus Byte Variablen

Beitrag von neco »

Herzlichen Dank, das ist genau das was ich gesucht habe, hat perfekt funktioniert!
Sich endlich einmal im Forum anzumelden statt ständig nach passenden Antworten
stundenlang zu suchen hat sich auf jeden Fall schonmal rentiert.

Antworten