如何清除Cancas重画 ( 积分: 100 )

  • 主题发起人 主题发起人 jaysuper
  • 开始时间 开始时间
J

jaysuper

Unregistered / Unconfirmed
GUEST, unregistred user!
我在一个透明的Timage的Canvas上画了一些线条图形,再次画时我需要清除以前的图形请问高手该如何做?我建立一个临时的img :TIamge 然后用Canvas.copyRect(rc,img.canvas,rc) 的方法的得到了清除的效果,但是再画时就画不上了,请问是什么原因?清除函数的代码如下:

img := TImage.Create(nil);
try
img.Transparent := true;
img.Width := FNJMap.Width;
Img.Height := fNJMap.Height;
img.Left := FNJMap.Left;
img.Top := FNJMap.Top;
rc.Left := img.Left ;
rc.Top := img.Top;
rc.Right := Img.Left +Img.Width;
rc.Bottom := img.Top + img.Height;
FNJMap.Canvas.CopyRect(rc,img.Canvas,rc);
finally
img.Free;
end;
 
我在一个透明的Timage的Canvas上画了一些线条图形,再次画时我需要清除以前的图形请问高手该如何做?我建立一个临时的img :TIamge 然后用Canvas.copyRect(rc,img.canvas,rc) 的方法的得到了清除的效果,但是再画时就画不上了,请问是什么原因?清除函数的代码如下:

img := TImage.Create(nil);
try
img.Transparent := true;
img.Width := FNJMap.Width;
Img.Height := fNJMap.Height;
img.Left := FNJMap.Left;
img.Top := FNJMap.Top;
rc.Left := img.Left ;
rc.Top := img.Top;
rc.Right := Img.Left +Img.Width;
rc.Bottom := img.Top + img.Height;
FNJMap.Canvas.CopyRect(rc,img.Canvas,rc);
finally
img.Free;
end;
 
FNJMap.Canvas.FillRect(FNJMap.Canvas.ClipRect)
 
//填上背景色
FNJMap.Canvas.Brush.Color := clInfoBk;//你的背景色
FNJMap.Canvas.FillRect(FNJMap.ClientRect);
 
透明的位图我应该填什么颜色??
 
恢复以前的备份就行了
Img := TImage.Create(nil);
Img.Assign(FNJMap);//保存图象到Img
....
....//FNJMap画图
....
FNJMap.Assign(Img);//恢复图象到FNJMap
 
Picture.Graphic := nil;
Canvas.Brush.Color := clBlack;
Canvas.FillRect(ClientRect);
背景是黑色的
 
多人接受答案了。
 
后退
顶部