删除或删除在TImage画布上绘制的线条

时间:2014-06-10 22:26:38

标签: delphi canvas line draw erase

这是我在stackoverflow中的第一个问题,我在发布之前已经在网上搜索了所有内容,所以你们是我的最后一次机会

我正在使用Canvas和MoveTo(X,Y)方法在Delphi xe5中制作一个包含足球场(TImage)画线的小程序,一切都很棒

program picture

但我的问题是我想在绘制下一行之前擦除更多的线,所以我不能同时拥有两条线,我该怎么做?

这是我用于绘制线条的代码片段:

 procedure TForm2.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);

 const
Line: Integer = 0;
 begin

if Line = 0 then begin
   Canvas.MoveTo(X,Y);
   Line := 1;
   Label1.Caption := IntToStr(x) ;
   label2.Caption :=  IntToStr(y);
End
else if Line = 1 then begin
   Canvas.LineTo(X,Y);
   Line := 0;
   Label3.Caption := IntToStr(x) ;
   label4.Caption :=  IntToStr(y);

end;
end;

2 个答案:

答案 0 :(得分:5)

如果您没有填充颜色的区域,则可以将Pen.Mode设置为pmXOR进行所有绘图。它将给出一些奇数点,其中线条交叉(例如红线与蓝色圆圈交叉),但是当你重新绘制红线时 - 它会消失。

只需添加:

Canvas.Pen.Mode := pmXOR;

如有必要,请记住现有的Pen.Mode并在完成绘图时将其恢复。

答案 1 :(得分:3)

您无法轻松擦除画布上的线条。你怎么知道之前有什么?当你在画布上书写时,之前的任何内容都会被覆盖并丢失。除非你记得之前有什么。

所以,有一个选项,记住以前的情况,然后恢复到那个状态。通常,您可能会记住静态背景。在这种情况下,您将拥有带足球场图案的静态图像。无论何时需要绘制它,绘制静态图像,然后绘制顶部的动态线条。

另一种方法是在需要时从头开始绘制整个图像。

无论你的解决方案是什么,我都建议TImage是错误的控制。这对静态图像来说非常棒,但只要你需要动态的东西,它就不适合。而是使用TPaintBox。在控件的OnPaint事件处理程序中,绘制整个图像。通过从预先准备的位图中移动静态间距图示,然后是动态线。或者只是从头开始绘制整个图像。