我想用image1.canvas.lineto(x,y)划直线,结果线是可以划出来,为什么不是在我的起点和终点之间,却划到上面去了,不知道大家有遇到过这种问题没,谢谢指教

解决方案 »

  1.   

    你得x,y是谁的坐标,form的还是image的
      

  2.   

    我觉得应该是image的,我的代码简化后就是这样的
    procedure TForm3.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      image1.canvas.lineto(x,y);
    end;procedure TForm3.Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      Image1.Canvas.MoveTo(x,y);
    end;procedure TForm3.Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      Image1.Canvas.MoveTo(x,y);
    end; 
      

  3.   

    你的TImage组件的Stretch属性设置的是True吧。
      

  4.   

    我是有把stretch设为true,难道是这里的原因?
      

  5.   


    当Stretch为True时, Canvas内的位图宽度或高度如果与Canvas实际的宽度或高度不相等时, Canvas在显示位图时会将它拉伸或者压缩, 这样一来, Canvas上显示的位图的分辨率(DPI)就与屏幕的不一样了。你要换算一下才行,试试下面的代码:
    Image1.canvas.lineto(Trunc(Image1.Picture.Graphic.Width / Image1.Width * X), Trunc(Image1.Picture.Graphic.Height / Image1.Height * Y));