Registriert seit: 4. Jan 2009
31 Beiträge
|
Rgb mittels Asm darstellen
4. Mai 2009, 01:42
Hallo,
Ich möchte gern die rgb Funktion mittels assemblercode darstellen.
Delphi-Quellcode:
function farbverlauf1(rot,gruen:integer):TColor;
begin
if rot < gruen then
result:= rgb(rot-gruen,0,0)
else
result:= rgb(0,gruen-rot,0);
{$R *.dfm}
end;
function farbverlauf2(rot,gruen:integer):TColor;
begin
ASM
Mov Eax,rot; //init
Mov Edx,gruen;
CMP Eax,edx;
jns @kalt; //rot<gruen
sub edx,eax;
Mov result,Eax;
jmp @weiter;
@kalt:
sub edx,eax;
shl eax,8;
Mov result,Eax;
@weiter:
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
Var x,y:integer;
begin
For x:=0 to 255 do
For y:=0 to 255 do
Image1.Canvas.Pixels[x,y]:=farbverlauf2(x,y);
Image1.Update;
end;
MIt dieser bekomme ich zwar ein ähnliches Ergebnis, allerdings dunkler(wobei beides integer, a 8 Bit sind).
Siehe dazu Bild.
Folgende Funktion hatte ich ursprünglich, hier erhalte ich aber nur einen teil.
Delphi-Quellcode:
function farbverlauf2(rot,gruen:integer):TColor;
begin
ASM
Mov Eax,rot; //init
Mov Edx,gruen;
CMP Eax,edx;
jns @kalt; //rot<gruen
sub eax,edx;
Mov result,Eax;
jmp @weiter;
@kalt:
sub edx,eax;
shl eax,8;
Mov result,Eax;
@weiter:
end;
end;
Mfg thomas
|
|
Zitat
|