Tu as raison c'est en fait ce qu'il me faut, mais je ne sais pas comment faire :
Tu te bases sur la couleur de transparence pour savoir qui est "pixel masqué" ? Comment peux-tu appliquer l'AA QUE sur ce 4-voisinage ?Sinon, tu dois faire un masque du bitmap, et tu n'effectue l'AA que sur le contour. Ca revient à l'appliquer sur tout pixel non-masqué ayant un pixel masqué dans son 4-voisinage (Haut/Bas/Gauche/Droite), et à ne pas en faire si son 4-voisinage n'est composé que de pixels non-masqués.
Bref, quelle méthode utilises-tu, toi, pour créer le masque de l'image et quelle est la formule magique ensuite pour lui dire d'appliquer le 4-voisinage comme tu dis ?
![]()
Nb : pour l'AA je n'ai réussi à faire fonctionner que cette procédure trouvé sur le forum :
et pour le masque j'utilisais ça mais la transparence n'est pas effectuée et pour le 4-voisinage je vois pas si ça peut s'adapter :
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 PROCEDURE TForm1.AntiAlias(clip:tbitmap); VAR x,y:Integer;p0,p1,p2:pbytearray; BEGIN clip.PixelFormat:=pf24bit; FOR y:=max(1,0)TO min(clip.height-2,clip.height)DO BEGIN p0:=clip.ScanLine[y-1]; p1:=clip.scanline[y]; p2:=clip.ScanLine[y+1]; FOR x:=max(1,0)TO min(clip.width-2,clip.width)DO BEGIN p1[x*3]:=(p0[x*3]+p2[x*3]+p1[(x-1)*3]+p1[(x+1)*3])DIV 4; p1[x*3+1]:=(p0[x*3+1]+p2[x*3+1]+p1[(x-1)*3+1]+p1[(x+1)*3+1])DIV 4; p1[x*3+2]:=(p0[x*3+2]+p2[x*3+2]+p1[(x-1)*3+2]+p1[(x+1)*3+2])DIV 4; END; END; Repaint; 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
19
20
21
22
23
24
25
26
27
28
29 procedure TForm1.Button1Click(Sender: TObject); var bitfile,bittmp,bittmp2:tbitmap; i:integer; MyRect,MyOther:TRect; begin bitfile:=tbitmap.create; bittmp:=tbitmap.create; bittmp2:=tbitmap.create; try bitfile.loadfromfile('Image.bmp'); bittmp.Width:=ImageList1.width; bittmp.height:=ImageList1.height; bittmp2.Width:=ImageList1.width; bittmp2.height:=ImageList1.height; for i:= 0 to ((bitfile.width div ImageList1.width)-1) do begin MyRect :=Rect(i*ImageList1.width,0,i*ImageList1.width+ImageList1.width,ImageList1.height+0); MyOther :=Rect(0,0,ImageList1.width,ImageList1.height); bittmp.Canvas.CopyRect(MyOther,Bitfile.Canvas,MyRect); bittmp2.canvas.draw(0,0,bittmp); Bittmp2.Monochrome :=true; AntiAlias(bittmp2); ImageList1.add(bittmp,bittmp2); //ImageList1.addmasked(bittmp,bitfile.Canvas.Pixels[0,0]); end; except end; bitfile.free; bittmp.Free; end;
Partager