Appel aux pros : pourquoi les pointeurs sont-ils plus rapides ?
bonjour à tous,
voilà je programme depuis longtemps en delphi, en amateur, et je n'ai jamais eu à faire aux pointeurs.
Aujourd'hui je me fais une fonction pour transformer une image couleur en niveaux de gris, à ma façon, et puis je trouve sur le net la même fonction à première vue identique, mais celle-ci utilise un pointeur.
je décide de tester la rapidité des 2 solutions et là, STUPEUR : Ma fonction mets 400ms et l'autre 15 !!!
donc 2 questions:
- pourquoi ?
- où peut-on trouver un bon tuto sur l'avantage des pointeurs et leur mise en oeuvre ?
merci
la fonction avec pointeur :yaisse2:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| function Grey1(Bitmap: TBitmap): TBitmap;
var h,v: Integer;
Row:^TRGBTriple;
begin
Bitmap.PixelFormat:=pf24bit;
for v := 0 to Bitmap.Height - 1 do
begin
Row:=Bitmap.ScanLine[v];
for h := 0 to Bitmap.Width - 1 do
begin
Row.rgbtBlue :=(Row.rgbtBlue +Row.rgbtGreen +Row.rgbtRed)div 3;
Row.rgbtGreen:=Row.rgbtBlue;Row.rgbtRed :=Row.rgbtBlue;
end;
inc(row);
end;
Result := Bitmap;
end; |
ma fonction sans pointeurs :cry:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| function Grey2(Bitmap: TBitmap): TBitmap;
var h,v: Integer;
R,G,B:byte;
color:integer;
begin
Bitmap.PixelFormat:=pf24bit;
for v := 0 to Bitmap.Height - 1 do
for h := 0 to Bitmap.Width - 1 do
begin
color:=Bitmap.Canvas.Pixels[h,v];
R:=byte(color);
G:=byte(color shr 8);
B:=byte(color shr 16);
R:=(R+B+G)div 3;
Bitmap.Canvas.Pixels[h,v]:=rgb(r,r,r);
end;
Result := Bitmap;
end; |