如何快速画线,关注图形算法的请进 (50分)

  • 主题发起人 主题发起人 jch_liang
  • 开始时间 开始时间
J

jch_liang

Unregistered / Unconfirmed
GUEST, unregistred user!
我从底层开始开发了一个矢量图形编辑系统,但总是感觉速度慢。 我用Canvas的pixels
属性画点,用BresenHam算法画直线,其它的图元就用直线拟合的方式。但这种方法比较
慢。就拿画直线来说吧,比起MoveTo和LineTo组合慢多了,相差10倍都不止。
我觉得问题是出在Pixels属性赋值的速度太慢。
请各位给我出点主意。分不够可再加。
 
拟合出的点太多了吧,算法问题;把生成的点减少,些最好MOVETO,LINETO来拼,
在种子点间少生成一些点用LINE来连;
这样快且可无级放大(如果程序需要的话) ;
PIXELS也不慢和MOVETO,LINETO
应是一个数量级的吧,当然用一百个点来拼一条线速度就可想而知了。
 
TO 我爱PASCAL
问题是,我非用拟合不可。比如生成反走样线时,都要自己写Pixel呀。Window的图形
处理能力实在不敢恭维。比起MAc,CGI简直不可忍受。LineTO这样的函数根本不能考虑使用。
 
搞不懂了,请教高手吧。
 
我后来试了一下把Pixels[x,y]:=color 语句去掉以后,发现拟合点所占的时间比例相当
小,远不到10分之一。大部分时间都耗在Pixels[x,y]:=color 这一句上了。我还测度过
GIS版吕大侠的反走样算法,也是这样。这个算法的速度还是很快,就是Pixels语句耗时。
卷兄和吕大侠来看看吧。
 
不要把计算出的值直接画(pixels)到canvas上,画到TBitMap上(直接修改值),再draw吧。试试
 
画图的时候决不要用pixel,这是Windows的问题,MS在GUI中就说过pixel是非常慢的,
画一两个点还可以,点数多了是绝对不能接受的。
 
To QQCAT:
你这个建议用于防止图形显示时的抖动现象,效果是不错的但对于改进速度似乎没有
作用。不过还是非常感谢你的关注。
to libin06:
你赞同你的说法。对API的SetPixel函数我做过相当精确的测试,真的很慢。
现在的问题是我确实要一点一点的画,你看过GIS版吕大侠的“反走样算法”吗?
只能一点一点来拟合的。谢谢!

另外我一直搞不清楚,Windows的LineTo函数为什么能画得这么快呢?据我所知
它用的也是BresenHam算法来画的。所以问题最后还是要落实到如何快速画Pixels的
问题上来。
我正在做任意宽的反走样线的绘图函数,已基本完成,现在急需解决绘图慢的问题。
如果有人可以解决的话,我可以提供这个函数。
 
用ScanLine呢????
dstBitmap.ScanLine[y+Y1];
 
我写有一个快速图像库,可用极快的速度操作位图象素级数据:
谁能介绍一下一些矢量绘图的算法好吗?
http://go3.163.com/dancewithmoon/CnPack/Source.rar
(内部测试代码,仅供参考)
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
I
回复
0
查看
457
import
I
后退
顶部