Bonjour a tous,
Je suis en train de realiser un filtre d'erosion sur une image et j'ai un petit probleme d'image temporaire.
Je travaille sur deux images;
la premiere (la source image321) est sur le canvas.
la deuxieme (la destination image322) est aussi sur le canvas.
lorsque je modifie l'image321 pour realiser une nouvelle image322 avec mon code dans une procedure. tous marche tres bien.
L'idée est d'utiliser ce code dans une fonction, je ne peux donc pas utiliser image321 et image322. je passe donc un argument:
soit le code suivant:
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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 Function ImErode(ImgTemp1:TBitmap32): TBitmap32; var i, j, z: Integer; SizeStrel: Integer; ImgTemp:TBitmap32; maxValue, ValuePix: Integer; begin SizeStrel:=2; ImgTemp:=ImgTemp1; // X // O // X for i:=0 to ImgTemp1.Width-1 do begin j:=SizeStrel DIV 2; repeat maxValue:=0; for z:=-(SizeStrel DIV 2) to SizeStrel DIV 2 do begin ValuePix:=Intensity(ImgTemp1.Pixel[i,j+z]); if ValuePix>maxValue then maxValue:=ValuePix; end; ImgTemp[i,j]:=maxValue*65793; Inc(j); until (j>=ImgTemp1.Height-1-SizeStrel DIV 2); end; // XOX for j:=0 to ImgTemp1.Height-1 do begin i:=SizeStrel DIV 2; repeat maxValue:=0; for z:=-(SizeStrel DIV 2) to SizeStrel DIV 2 do begin ValuePix:=Intensity(ImgTemp1.Pixel[i+z,j]); if ValuePix>maxValue then maxValue:=ValuePix; end; ImgTemp[i,j]:=maxValue*65793; Inc(i); until (i>=ImgTemp1.Width-1-SizeStrel DIV 2); end; ImErode:=ImgTemp; end; //la procedure qui appelle la fonction procedure TForm1.Button1Click(Sender: TObject); begin Image322.Bitmap:=ImErode(Image321.Bitmap); end;
en fait, ce qui se passe c'est que le programme modifie l'image destination non pas a partir de l'image source mais a partir de la destination!
donc comment puis je faire....
j'espere que j'ai ete clair... merci....
Partager