{Draw_line_without_multiplication (c) BeeLog écrit par denis Bertin - pour Vincent-Draw}
	

Another Bresenham algorythme

{a,b,c,d is the coordinate (x,y) to (xx,yy)} Procedure denis_line_attenuee(dc:hdc; a,b,c,d:real; color:tcolorref; centre_x,centre_y,rayon:integer); var maximum:real; i,j:integer; dx,dy:real; procedure set_pixel_trans(PaintDC:hdc; x,y:integer; color:tcolorref); var an_color:tcolorref; transparence:real; hue,lum,sat:real; begin transparence:=(maximum-utile.distance(centre_x,centre_y,x,y))/maximum; an_color:=winprocs.getpixel(PaintDC,X,Y); winprocs.setpixel(paintdc,X,Y, rgb( min(255,round(getrvalue(color)*transparence+getrvalue(an_color))), min(255,round(getgvalue(color)*transparence+getgvalue(an_color))), min(255,round(getbvalue(color)*transparence+getbvalue(an_color))) )); end; {set_pixel_trans} begin maximum:=utile.distance(centre_x,centre_y,centre_x+rayon,centre_y+rayon); if (a-c)=0 then begin {vertical} j:=round(a); for i:=min(round(b),round(d)) to max(round(b),round(d)) do set_pixel_trans(dc,j,i,color); exit; end; {vertical} if (b-d)=0 then begin {horizontal} j:=round(b); for i:=min(round(a),round(c)) to max(round(a),round(c)) do set_pixel_trans(dc,i,j,color); exit; end; {horizontal} {delta - différence} dx:=(b-d)/(a-c); dy:=(a-c)/(b-d); if abs(dx)<abs(dy) then begin {progression horizontal} if a<c then begin {quartier 0-45°} for i:=round(a) to round(c) do begin b:=b+dx; set_pixel_trans(dc,i,round(b),color); end end {quartier 0-45°} else begin {quartier 180°-135°} for i:=round(c) to round(a) do begin d:=d+dx; set_pixel_trans(dc,i,round(d),color); end end; {quartier 180°-135} end {progression horizontal} else begin {progression vertical} if b<d then begin {quartier 45°-90°} for i:=round(b) to round(d) do begin a:=a+dy; set_pixel_trans(dc,round(a),i,color); end; end {quartier 45°-90°} else begin {quartier 90°-135°} for i:=round(d) to round(b) do begin c:=c+dy; set_pixel_trans(dc,round(c),i,color); end; end; {quartier 90°-135°} end; {progression vertical} end; {denis_line}