如何使用Canvas.CopyRect()绘制新的Timage副本

时间:2014-08-20 14:48:13

标签: delphi

我有一个代码在timage上绘制一条移动线,我希望以前的旧线总是消失,但是这段代码使得所有线都出现在那里......当我启用DoubleBuffering来形成时,下面的代码工作正常但位于myimg中的背景位图根本不显示。

  Fbitmap.Canvas.Pen.Color:=clRed;
  Fbitmap.Canvas.Pen.Width:=2;
  Fbitmap.Canvas.MoveTo(Xo,Yo);
  Fbitmap.Canvas.LineTo(Xs,Ys);
  myimg.Canvas.CopyRect(Rect(0, 0, Width, Height), FBitmap.Canvas, Rect(0, 0, Width, Height));

2 个答案:

答案 0 :(得分:3)

这种情况发生并不奇怪。 TImage适用于静态图像。当你在画布上画画时,你画的东西就在那里。那是设计上的。

在我看来,你选择了错误的控制。明显的候选人是:

  • A TPaintBox。在OnPaint处理程序中绘制背景,然后绘制线条。
  • 自定义控件,用于绘制背景以响应WM_ERASEBKGND,以及前景以响应WM_PAINT

后一种选择可能对你来说太过分了,但根据我的经验,这是防止闪烁的最好方法。

答案 1 :(得分:1)

有几种方法可以实现这一目标。最简单的方法是保持图像不变,并添加另一个组件(TShape),您将移动图像。

如果必须在图像上写入线条,则需要在存储器中记录原始图像,并在绘制新图像之前将CopyRect与线条一起使用。此方法的更快变化是仅在内存中保留将绘制线条的图像部分,因此您可以稍后将其复制到线上,从而将其删除。

相关问题