Also auf den Wert 176 kommt man nur, wenn man den 8-Bit- in einen 12-Bit-Wert umwandelt und dann einfach x16 nimmt, also:
Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var
ab: byte;
r, g, b: byte;
begin
ab := $FF;
r := 16 * ((( ab and 7) * 15) div 7);
g := 16 * ((((ab shr 3) and 7) * 15) div 7);
b := 16 * ((((ab shr 6) and 3) * 15) div 3);
showmessage(inttostr(r));
showmessage(inttostr(g));
showmessage(inttostr(b));
end;
Du solltest dann aber vielleicht mit einer CLUT (Color Lookup Table) arbeiten und diese bei der Initialisierung füllen.
Delphi-Quellcode:
var
clut:
array [byte]
of TColor;
procedure InitClut;
var
ab: byte;
r, g, b: byte;
begin
for ab := $00
to $FF
do
begin
r := 16 * ((( ab
and 7) * 15)
div 7);
g := 16 * ((((ab
shr 3)
and 7) * 15)
div 7);
b := 16 * ((((ab
shr 6)
and 3) * 15)
div 3);
clut[ab] :=
RGB(r, g, b);
end;
end;