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
ma fonction sans pointeurs
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
Partager