怎样擦除画布上的某区域的东西? ( 积分: 100 )

  • 主题发起人 主题发起人 lunyx_allen
  • 开始时间 开始时间
L

lunyx_allen

Unregistered / Unconfirmed
GUEST, unregistred user!
例子如下:
界面上有个 image1.Picture.LoadFromFile('a.bmp');
现在我要在那张image上画张小bitmap,如下:
procedure TForm1.Button2Click(Sender: TObject);
var
Bitmaps : TBitMap;
begin
Bitmaps := TBitmap.Create;
try
with Bitmaps do begin
LoadFromFile('36/1.bmp');
Transparent := True;
end;
image1.Canvas.Draw(180,180,BitMaps);
finally
Bitmaps.Free;
end;
end;
请问,怎样把那张bitmap擦掉?也就是说还原回原来的image,不要告诉我重新image1.Picture.LoadFromFile('a.bmp');
 
有没有哪位大虾知道啊
 
画之前把 Image 的内容保存下来不就行了?
 
当你画第二次的时候,第一次的就已经被擦除掉拉
所以只能再image1.Picture.LoadFromFile('a.bmp');
或者
来自:vvyang, 时间:2007-12-3 17:40:04, ID:3856597
画之前把 Image 的内容保存下来不就行了?
 
保存第二次画的图形的区域就可以了,当要撤消第二次画的内容,恢复保存的区域实际上很快。
 
保存第二次画的图形区域的代码怎样,能不能给个例子?
 
To 楼主:
var
hdcMem: HDC;
hbmpMem, hbmpOld: HBITMAP;

//生成一副内存位图,用来保存被抹去的区域
hdcMem := CreateCompatibleDC(0);
hbmpMem := CreateCompatibleBitmap(hdcMem, Bitmaps.Width, Bitmaps.Height);
hbmpOld := SelectObject(hdcMem, hbmpMem);

//画之前保存区域,用下面的代码
BitBlt(hdcMem, 0, 0, Bitmaps.Width, Bitmaps.Height, image1.Canvas.Handle, 180, 180, SRCCOPY);

//需要把画上的图擦掉,用下面的代码
BitBlt(image1.Canvas.Handle, 180, 180, Bitmaps.Width, Bitmaps.Height, hdcMem, 0, 0, SRCCOPY);

//用完了释放
DeleteObject(SelectObject(hdcMem, hbmpOld));
DeleteDC(hdcMem);
 
多谢vvyang,代码好像实现不了,不过用bitblt 是对了。我改了一下,可行。如下
我直接用Tbitmap来保存区域,
BitBlt(Bmp.Canvas.Handle,0,0,Bmp.Width,Bmp.Height,Image1.Canvas.Handle,180,180,SRCCOPY);
恢复区域我直接用
Image1.Canvas.Draw(180,180,Bmp);
 
谢谢各位同志
 
后退
顶部