菜鸟想实现 在某控件上画图(信息量较大),能够实现放大缩小(可以让用户自由选择区域),并能够保存图片。请问选中哪种控件效率最高,各有何优劣。Timage ? TpainBox? TBitImage?
另:在TpainBox Onpain中 with pb1.Canvas do
begin Brush.Color := clRed;
//Pen.Style:=psClear;
Rectangle(0,0,10,100); Pen.Width :=10;
Pen.Color := clBlack;
//Pen.Style := psSolid;
Brush.Style:=bsclear;//取消填充色
MoveTo(20,0);
LineTo(20,100);
end;可以明显地看到 ,上段代码 那两句注释以后,第二次onpaint时有问题,红色的部分会变黑,宽度也向右变大了,请问错误原因。
另:在TpainBox Onpain中 with pb1.Canvas do
begin Brush.Color := clRed;
//Pen.Style:=psClear;
Rectangle(0,0,10,100); Pen.Width :=10;
Pen.Color := clBlack;
//Pen.Style := psSolid;
Brush.Style:=bsclear;//取消填充色
MoveTo(20,0);
LineTo(20,100);
end;可以明显地看到 ,上段代码 那两句注释以后,第二次onpaint时有问题,红色的部分会变黑,宽度也向右变大了,请问错误原因。
红色变黑也是同理Pen.Color := clBlack;颜色没还原
至于哪种效率高?他们实现的功能都有区别把,哪个顺手那个效率就高
TImage,可通过Picture属性加载显示图片
TPaintbox,提供一个画布(Canvas)
TBitImage 是改良版的 TImage
2.我要实现“在某控件上画图(信息量较大),能够实现放大缩小(可以让用户自由选择区域),并能够保存图片”,求推荐一个最高效的控件
begin Brush.Color := clRed; //这里是软件默认的画笔宽度为1
//Pen.Style:=psClear;
Rectangle(0,0,10,100); Pen.Width :=10; //这里设置了画笔宽度是10
Pen.Color := clBlack; //画笔颜色变成黑色
//Pen.Style := psSolid;
Brush.Style:=bsclear;//取消填充色
MoveTo(20,0);
LineTo(20,100);
end;这个是最基本的控件操作。作为编程人员你一定要清楚了解其属性、方法。
至于你要用什么控件画图,个人觉得使用Timage控件好一些,毕竟有操作功能,比如放大缩小等。
你谈到信息量大,那么可以建议你使用双缓冲绘图。
基本代码如:
procedure form1.button1click(..)
var
DC,MemDC:HDC;
MemBitmap,OldBitmap:HBitmap;
tpen:Hpen;
i:integer;
begin
DC := GetDC(0);
MemBitmap := CreateCompatibleBitmap(DC, ClientRect.Right, ClientRect.Bottom);
ReleaseDC(0, DC);
MemDC := CreateCompatibleDC(0);
TPEN:=createpen(PS_SOLID,1,RGB(120,255,230));//设置画笔
SelectObject(MemDC,tpen);
OldBitmap := SelectObject(MemDC, MemBitmap);
try
movetoEX(MemDC,0,0,nil);
for i:=0 to 20000 do
LineTo(MemDC,i,random(1000));
BitBlt(image1.canvas.handle, 0, 0, ClientRect.Right, ClientRect.Bottom, MemDC, 0, 0, SRCCOPY);
finally
SelectObject(MemDC, OldBitmap);
DeleteDC(MemDC);
Deleteobject(Tpen);
DeleteObject(MemBitmap);
end;
end;希望对你有帮助!
谢谢您的耐心解答。
您提供的代码,用图形DC句柄这种方式画图,我在MFC里画过一点。为什么delphi中不直接用canvas呢,是不是效率相差很大?
http://topic.csdn.net/u/20120419/13/d7084181-79cb-41cd-bb10-8effca70927c.html
是的话,关注我的QQ,我传个实例给你
效率肯定是CDC快,应为CANVAS是对CDC的封装