使用Image还是PaintBox(50分)

  • 主题发起人 主题发起人 wxb761014
  • 开始时间 开始时间
W

wxb761014

Unregistered / Unconfirmed
GUEST, unregistred user!
我正在开发一个图形应用程序(类似AuotoCad)
但不知选Image作为画板好还是PaintBox作好!
二者有何区别,为何Image控件无Color属性。无OnPaint事件。
 
两者都是直接从TGraphicControl类继承下来,都属于非窗口类;如果只是简单的画线
或画点,用Painbox不错,如果想多支持一些图形操作,image要方便一些.
 
用PaintBox,对其Canvas操作。
 
不错,当然是用PaintBox了.
Image是显示用的,PaintBox才是绘图用的
delphi的example厘米有画图的例子,可以参考一下
 
当然是用PaintBox了,事件的编写比较方便。
 
我选 image, 呵呵,
 
用OLE吧。
 
在PaintBox画的图,Paintbox不会帮你重,当Paintbox被其它窗口挡,
以后重新显示时,被挡住的部分的图就会不见了。而Image则没有这问题
 
Victortim: 响应 PaintBox 的 OnPaint 事件。
 
TPaintBox要求直接在canvas上绘图,在canvas无效时(如窗体的切换),不能自动重绘,需要自己重画这一切,
具体的就是要在重载的OnPaint事件句柄中加入绘图的代码
TImage则能够在内部处理所有的重画工作,也就没有OnPaint句柄.
 
to Croco:用OnPaint?不是吧!如果是一些比较简单的线条或是比较简单的图形
还可以,但如果是一些动态的图形或在程序运行时由用户动态输入的,则没有理由
在记录所有用户的操作,然后在OnPaint里实现重画吧。就算这样实现重画速度也
会比Image慢,因为在OnPaint里要重新执行所有的画图操作,而在Image里,则图形
已以位图的形式记录下来,重显时可以直接显示出来。

——所以我推荐使用Image,省去位图重画的烦恼。
 
Victortim,你好!提出下面几点意见,请指教。
我选择 PaintBox 而不是 Image ,还有如下理由:
其一、对于用户动态的输入应该提供橡皮筋式的操作,当然 Image 也可,
该类型的操作应该以异或方式完成,并不激活OnPaint,而与OnPaint事件自身无关。
所以不会有速度慢的问题。
其二、对于用户的操作,应该以某种数据结构记录下来,而不要让控件自身代办。
正式因为要开发类似与画笔的动态功能,其 Undo 功能必不可少,而这一点正式
Image所不能达到的。

 
续上:
其三、对于缩放功能,记录用户操作(用 PaintBox) 就更为必要了,如果使用
Image 会在放大之后的线条上出现锯齿。
其四、文件保存。通常情况下,以流方式保存的操作数据文件,应比位图文件包含
更多可操作的信息和更少的存储空间。其实质是向量图形和点阵图形的差别。
比如,对向量图形,用户可以选中图形对象,设置层次等。
其五、写在 PaintBox 的 OnPaint 事件中的代码稍作改动,可以很方便地用于
打印预览和打印:加上比例因子,可用于打印预览。把对 PaintBox.Canvas 的操作
换成对 Printer.Canvas 的操作即完成了打印。
 
image不一样可以记录用户操作,并以流格式保存数据?
好像是不是向量图和image/paintbox没有关系吧?
 
Image 怎么读取向量图呢?
 
Image 并没有提供给用户 OnPaint 的事件。
 
paintbox能读取向量图? 还不是自己读取之后画上去的.

image没有onPaint是因为根本不需要.
 
to cAkk:
还是不懂 Image 怎么读向量图,请教?
 
多人接受答案了。
 
后退
顶部