Dlatego że masz 6 operacji logicznych zamiast skoków i powrotów z funkcji :P
Domyślam się z Kodu, że pobierasz kolor spod kursora a więc musisz zrobić tak jak robiłes :P
program Test;
{$APPTYPE CONSOLE}
uses
SysUtils,windows,Graphics;
var Color :TColor;
R,G,B:Byte;
TC,i,Total:Cardinal;
begin
readln;
TC:=Gettickcount();
for i:= 0 to 99999999 do
begin
R := (Color and $0000FF);
G:= (Color and $00FF00) shr 8;
B:= (Color and $FF0000) shr 16;
end;
Total:= Gettickcount()-TC;
Writeln(Total);
Readln;
TC:=Gettickcount;
for i:= 0 to 99999999 do
begin
R := GetRValue(Color);
G:= GetGValue(Color);
B:= GetBValue(Color);
end;
Total:= Gettickcount()-TC;
Writeln(Total);
Readln;
end;
Mały test Różnica duża :) u mnie 90 do 1863 taktów a to zysk ponad 20 krotny:)
jak dodamy rzutowanie np. R := byte(Color and $0000FF) do mojego sposobu kod staje się nieco ponad 3x szybszy :) ale nadal jest szybszy :)
@niżej [green] w sumie racja - ale jest oszczędniej ;p