主题:  关于绘制线段问题

rainy_5d

职务:普通成员
等级:2
金币:1.0
发贴:225
注册:2000/10/23 19:44:16
#12001/6/4 23:20:12
昨天看到一个随意绘制线段的程序(类似windows中画图的画笔),挺不错的,但是有一点感到困惑。

程序中大致的思路是定义一个BMP的点,然后用list记录鼠标拖过的点,连点成线,这就必然出现一个问题,拖动快的时候,线段有断的地方,若拖动慢,则线段很平滑。

我看到在director中的Paint,是这样的,线段的平滑与否和拖动速度有关,然而在windows中的图画程序却与拖动速度无关,始终平滑,不知道写类似windows中图画的画笔绘制线段程序应如何下手。

请各位高手赐教。



donlee

职务:普通成员
等级:1
金币:1.0
发贴:271
注册:2000/12/8 8:52:18
#22001/6/5 8:25:46
在D确是画出了不连续的点,可以看它的demo。如果是画线的话,可以用下面的方法:
假设我们希望从鼠标按下的点画到鼠标放开的点,则可在mousedown定义一个起始点,在exitframe中定义结束点,用image lingo来重新画线(不是描点)。
但对于曲线这样做就不行了。



改将

职务:普通成员
等级:1
金币:0.0
发贴:102
注册:2006/2/11 1:14:46
#32001/6/5 14:29:19
这原来我在director中做过的,可能是由于我的功力不到家的缘故吧!做出来的东西如果用于我的那个画板主程序中,会有延迟的现象。可是director中行为库中就有一行为写的很好。用它就象在windows下的画板下工作一样的快速。可以参考一下。
还有在director中我一直无法做到填充的效果。就是像windows中的那样。随手画一个图形后,即可选色填充。
望高手赐教。



donlee

职务:普通成员
等级:1
金币:1.0
发贴:271
注册:2000/12/8 8:52:18
#42001/6/6 8:23:19
1、为得到流畅的效果,就注意设置高的tempo,同时在这一帧中不要给cpu与显示系统太重的负荷。
填充:
2、如果是单色可以用一个黑色的member,在sprite中设置前景色的方法。甚至填充pattern用imagelingo也应该是可以做出的,但效率一定会受影响。
第2点我没测试过。



愁眉不展

职务:普通成员
等级:1
金币:0.0
发贴:114
注册:2000/12/21 16:27:18
#52001/6/6 14:38:47
我是这样做的:
先定义一个位图做笔刷,在mouse按下时打开其尾迹属性并使其随mouse移动,抬起时,关闭尾迹属性并一次copy图象。在mouse移动时,根据移动的位置以及笔刷的大小计算中间需要画点的步长。配以适当的笔刷及相应的随即处理甚至可以画出平滑的蜡笔效果。
希望对你有帮助。



rainy_5d

职务:普通成员
等级:2
金币:1.0
发贴:225
注册:2000/10/23 19:44:16
#62001/6/7 9:33:39
To 愁眉不展兄:
能给出代码吗?若不方便,请发至littlerainy@netease.com

谢谢。



dexn

职务:普通成员
等级:1
金币:1.0
发贴:157
注册:2000/12/7 21:54:20
#72001/6/7 13:10:25
如果用什么方法,好象只要驱动事件是exitframe类的,都会造成不画圆时出现跟不上鼠标的问题,因为记录是没帧记录一次鼠标位置,速度上受到的限制是无发弥补的。idle可能是个好方法,可以设置调用时间劲可能小,但是我没做过,不知道可不可以。



改将

职务:普通成员
等级:1
金币:0.0
发贴:102
注册:2006/2/11 1:14:46
#82001/6/7 14:42:40
不知道大家看了那个director自带的paintbox行为了没有!因为实在是比较的长。我只是粗看了以下,用到了很多很好的方法。具体是怎样。大家可以自己去看一下!
可以自己随便画一个paint的方框作为底版。将canvas行为附在上面,简单的设置行为属性后就可以画了。
强烈推荐。强烈推荐。强烈推荐。强烈推荐。强烈推荐。强烈推荐。强烈推荐