Einzelnen Beitrag anzeigen

thomasku

Registriert seit: 4. Jan 2009
31 Beiträge
 
#1

Rgb mittels Asm darstellen

  Alt 4. Mai 2009, 00: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
Angehängte Grafiken
Dateityp: bmp rgb_vs_asm_178.bmp (264,3 KB, 21x aufgerufen)
  Mit Zitat antworten Zitat