// Eine Farbe wird
in ihre entsprechende Grau-Schattierung konvertiert.
// Getestet mit RS 10.4 unter Win11
function Gray(Clr: TColor): TColor;
asm
MOVZX EDX,AH
MOV ECX,EAX
SHR ECX,$10
MOVZX EAX,AL
IMUL EAX,$4C8B
IMUL EDX,$9646
IMUL ECX,$1D2F
ADD EAX,EDX
ADD EAX,ECX
SHR EAX,$10
MOVZX EAX,AL
MOV AH,AL
SHL EAX,8
MOV AL,AH
end;
// Beispiel 1
procedure TForm1.Button1Click(Sender: TObject);
begin
Color := Gray(clLime);
end;
// Beispiel 2
procedure TForm1.Button2Click(Sender: TObject);
var
x, y: Integer;
bm: TBitmap;
begin
// Falls Image1 z.B. ein Jpeg enthält,
// wird der Umweg über "bm" gewählt
bm := TBitmap.create;
bm.assign(Image1.Picture.Graphic);
with bm do
for x := 0 to pred(Width) do
for y := 0 to pred(Height) do
SetPixel(Canvas.Handle, x, y, Gray(GetPixel(Canvas.Handle, x, y)));
Image1.Picture.assign(bm);
FreeAndNil(bm);
end;
|