Canvas - misturar duas cores (cor intermediaria)

Top  Previous  Next

// Esta funcao retorna uma cor intermediaria entre duas

 

 

function GetColorBetween(const StartColor, EndColor: TColor): TColor;

var

  r1, r2, r3, g1, g2, g3, b1, b2, b3: Byte;

 

  function CalcColorBytes(const fb1, fb2: Byte): Byte;

  begin

    Result := fb1;

    if fb1 < fb2 then Result := FB1 + Trunc(0.5 * (fb2 - fb1));

    if fb1 > fb2 then Result := FB1 - Trunc(0.5 * (fb1 - fb2));

  end;

 

begin

  asm

    mov EAX, Startcolor

    cmp EAX, EndColor

    je @@exit

    mov r1, AL

    shr EAX,8

    mov g1, AL

    shr Eax,8

    mov b1, AL

    mov Eax, Endcolor

    mov r2, AL

    shr EAX,8

    mov g2, AL

    shr EAX,8

    mov b2, AL

    push ebp

    mov al, r1

    mov dl, r2

    call CalcColorBytes

    pop ecx

    push ebp

    Mov r3, al

    mov dL, g2

    mov al, g1

    call CalcColorBytes

    pop ecx

    push ebp

    mov g3, Al

    mov dL, B2

    mov Al, B1

    call CalcColorBytes

    pop ecx

    mov b3, al

    XOR EAX,EAX

    mov AL, B3

    SHL EAX,8

    mov AL, G3

    SHL EAX,8

    mov AL, R3

@@Exit:

    mov @result, eax

  end;

end;