关于清除画线(canvas) (100分)

  • 主题发起人 主题发起人 chenliyan163
  • 开始时间 开始时间
C

chenliyan163

Unregistered / Unconfirmed
GUEST, unregistred user!
我在image上画了很多筐(用来做标记),但当我标记标错时,我想把前一次所画的线清楚掉(只清除前一次),那怎么办啊?下面是我的源代码:
imageprocess.Image1.Canvas.Pen.Color:=clRed;
case i_counts_point of
1..9:begin
imageprocess.Image1.Canvas.Rectangle(x,y,x+8,y+13);
end;
10..99:begin
imageprocess.Image1.Canvas.Rectangle(x,y,x+13,y+13);
end;
100..1000:begin
imageprocess.Image1.Canvas.Rectangle(x,y,x+17,y+13);
end;
end;

imageprocess.Image1.Canvas.Font.Charset:= GB2312_CHARSET;
imageprocess.Image1.Canvas.Font.Color:= clRed;
imageprocess.Image1.Canvas.Font.Height:= -10;
imageprocess.Image1.Canvas.Font.Name:= '宋体';
imageprocess.Image1.Canvas.Font.Style:= [];

imageprocess.Image1.Canvas.TextOut(x+1,y+1,inttostr(i_counts_point));

i_counts_point:=i_counts_point+1;

end;
end;
 
如果每条线不交叉,好办用XOR(可能不这么写)模式化线
如果每条线交叉,难啊,
 
如果想清除以前的操作可以考虑用历史纪录。你可以写个历史纪录类,记录对Image1.Canvas的所有操作,不必要记很多步,比如10步,另外创建一个Tbitmap,拷贝Image1的初始图像。对Image1.Canvas的前10步操作,Tbitmap保持不变,以后每操作一步,将历史纪录类中最早的一步操作反映到Tbitmap上,然后修改历史纪录类,使其保持最近的10步操作。当想恢复Image1时,将欲恢复步数连同之前的历史纪录都反映到Tbitmap,然后将Tbitmap复制到Image1,然后修改历史纪录。
 
谢谢楼上的两位大哥给我的指导,
第二位大哥,可不可以把源程序给我,我真地很菜地,如果分不够的话我可以加分
 
我写得还不够清楚吗?我没有源代码,你先试着写写看,遇到问题提出来我尽力帮你,不一定帮你写代码才是帮你啊,只有通过自己的努力做出的东西才记得牢。
 
好的,spacepoint哥哥,71524715这是我的QQ,加我好吗?
 
已经加你了,我是77155059
 
如果只是一次的话,双缓冲和Xor的方法都可以。
 
spacepoint哥哥,不是71524715,我打错了,我是71524751
 
多人接受答案了。
 

Similar threads

后退
顶部