关于图形的放大缩小(225分)

B

bzb

Unregistered / Unconfirmed
GUEST, unregistred user!
在一个窗口中我放置了一些图形(是一些自己做的图形构件),我想在运行期具有放大和缩小的功能,请问有没有构件或模板之类的可以实现这些功能,就象chart构件中图形部分,可随意放大缩小,左右移动。
若没有类似的构件,请问有没有类似的算法可实现这些功能。(放大之后对于部分超出母窗口范围之外的对象如何处理)。
若是运行期动态生成的对象,我可以做到和窗体同时缩放,对于设计期放置在窗体中的对象,又如何做到呢?
敬请各位专家解答,愿以所有积分相酬。多谢!
 
你可以去看一下PREVIEW类的控件原代码,自己编也很容易,超出部分可以
用滚动条,只要重载ONMOUSEDOWN和ONMOUSEUP就可以了,区别运行期和设
计期用CSDESIGNING,如果运行期和设计期实现同样功能,直接编就可以了。
 
具有这种功能的控件好象是很多的.
而且,由于TImage本身就有Stretch功能,所以做应该也很容易.
 
对呀,这种功能自己写也很方便!
 
就用stretch方法,很不错的!
 
各位前辈,能不能解释得具体一点,另外我自己编的图形构件不含stretch方法,
这种情况如何解决呢?
区别运行期和设计期用CSDESIGNING,如果运行期和设计期实现同样功能,直接编就可以了。又是什么意思呢?请具体解释一下,不胜感激!
 
canvas本身就支持stretch copy的。
其实是windows本身就支持。
用image1.canvas.看一下帮助就有了。
 
为什么不试一下delphix呢?
Directdraw功能很强的
 
实现zoom_in, zoom_out不是很简单的事情, 实际上是实现一个世界坐标到屏幕坐标
的变换.

比如说继承一个TPanel作为屏幕坐标系统TViewport, 最少应该有三个要素: 当前显
示区域对应的世界坐标区域矩形, 变换中心, 变换比例系数.

作为Delphi的控件, 要想能够放缩, 应该有在世界坐标系中的边界矩形 WordBound,
一个在当前比例下的边界矩形 BoundsRect.

每次放缩操作的时候, 都要更具变比系数求出区域矩形, 然后再用该矩形剪裁你的控
件, 需要显示的控件要从新计算它的BoundsRect, 然后重画. 控件的Paint过程中要
用变换比例系数来画图.

 
到 DSP (http://sunsite.icm.edu.pl/delphi/) 中用 resize 检索一下吧.
 
由于Delphi的控件画图时都是使用控件自己的坐标系, 所以要绘制每一个控件都需要
变换,很麻烦. 简单的办法是, 能够缩放的图形控件都做成Viewport的子控件, 在那
个TViewport中建立一套画图命令, 如: VptMoveTo, VptLineTo, VptArc, VptEllipse,
VptPolyLine, VptDrawText or VptTextOut... 这些命令本身带有变换功能.

子控件都做成不可视控件(或者是TCollection), 绘图的时候, 调用父控件的绘图命
令, 以实现子控件与设备无关.

寄给你一个Dxf3.Zip的样例程序, 是用来显示AutoCAD DXF文件的样例程序, 其中用
到了zoom功能.
 
huizhang,你的email我收不下来,现在丢了,能否再发一次,多谢!
 
参见 "关于矢量画图的控件"
 
矢量图的放大缩小,在于你转换画图的比例调节.
点阵图的放大缩小,可以用canvas的strech方法但比较粗糙,
用一些抽点加点算法比较好.
 
试一下用MetaFile,它是Windows的矢量图型格式,先生成MetaFile,显示时用
MetaFile的缩放功能显示,不存在失真,一些Preview控件就是这么做的。
 
bzb:

这个问题已经很长时间没有人参加讨论,为保持版面
整洁,节约网友时间,请提问者采取必要处理措施。
关于图形图象版管理细则,请参见<a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=111927">这个</a>问题。如两天
内提问者没有响应,我将采取强制措施。

如有管理建议,请到<a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=111927">这里</a>提出。谢谢!
 
多人接受答案了。
 
顶部