Hab mich heute mal intersssehalber hingesetzt, um das zu optimieren
Herausgekommen sind folgende Funktionen (Mit Unterstützung von Dax und Muetze1!)
Eregbnise der Zeitmessung für 1 Million Durchläufe:
Binärbaum's Funktion: 109 ms
Pascal Funktion: 94 ms (Darken())
Assembler-Funktion: 63 ms (Darken2())
Die Funktionen:
Delphi-Quellcode:
function Darken(Value: TColor; Percentage: Byte): TColor;
type PP = ^DWord;
var Buffer:
Array[0..3]
of Byte;
I: Integer;
begin
PP(@Buffer)^ := Value;
for I:=0
to 2
do
Buffer[I] := (Buffer[I] * Percentage)
DIV 100;
Result := PP(@Buffer)^;
end;
function Darken2(Value: TColor; Percentage: Byte): TColor;
var Buffer:
Array[0..3]
of Byte;
asm
PUSHA
MOV EBX, Value
XOR ECX, ECX
MOV CX, 3
@@CLC:
MOV AL, BL
MUL Percentage
MOV
DL, $64
DIV DL
MOV byte ptr buffer[3], al
SHR buffer, 8
SHR EBX, 8
LOOP @@CLC
POPA
MOV EAX, Buffer
end;
Mit dem Heller machen ist das Leider nicht so einfach.
Gruß, Moritz
"Optimistisch ist diejenige Weltanschauung, die das Sein höher als das Nichts stellt und so die Welt und das Leben als etwas an sich Wertvolles bejaht."
Albert Schweitzer