Bresenham直线画法:从(x0,y0)到(x1,y1)procedure Bresenham_Line(Image:TImage;x0,y0,x1,y1:Integer);
var
  i,p,dx,dy,s0,s1,x,y:Integer;
  isChanged:Boolean;
begin
  dx:=Abs(x1-x0);
  dy:=Abs(y1-y0);
  s0:=Sign(x1-x0);
  s1:=Sign(y1-y0);
  x:=x0;
  y:=y0;
  if dy>dx then
  begin
    i:=dy;
    dy:=dx;
    dx:=i;
    isChanged:=true;
  end
  else
    isChanged:=false;  p:=2*dy-dx;
  for i:=1 to dx do
  begin
    Image.Canvas.Pixels[x,y]:=clRed;
    if P>=0 then
    begin
      if isChanged then
        x:=x+s0
      else
        y:=y+s1;
      p:=p-2*dx;
    end;
    if isChanged then
      y:=y+s1
    else
      x:=x+s0;
    p:=p+2*dy;
  end;
end;