X xuegaoyili Unregistered / Unconfirmed GUEST, unregistred user! 2009-05-11 #1 正在做一个画图软件,想实现每画一个形状或线条,都像在一个独立的层上画得一样,可以放大缩小,旋转不影响其它画的东西,而且能把几次画的线条或形状能组合成一个图形放大缩小旋转...也能多次组合,不差分.
H hs-kill Unregistered / Unconfirmed GUEST, unregistred user! 2009-05-11 #3 用个比较龌龊的方法....每次mousedown事件里创建一个image,把图像画到这个image的canvas上每次mouseup的时候把image.graphic赋值给一个pngobject,然后遍历把所有白色像素的透明通道全都设成100%透明,再把这个pngobject给image 这样一个图层就搞定了.....至于放大、缩小、旋转,针对这个image就OK了没做测试....不知道效率如何......
用个比较龌龊的方法....每次mousedown事件里创建一个image,把图像画到这个image的canvas上每次mouseup的时候把image.graphic赋值给一个pngobject,然后遍历把所有白色像素的透明通道全都设成100%透明,再把这个pngobject给image 这样一个图层就搞定了.....至于放大、缩小、旋转,针对这个image就OK了没做测试....不知道效率如何......
X xuegaoyili Unregistered / Unconfirmed GUEST, unregistred user! 2009-05-12 #4 楼上兄弟,那样肯定不成的.效果不会好的.目前看应只有GDI+画图是最方便的.但组合和取消组合是可以无限级的.这一点在数据结构上不好设计
H hs-kill Unregistered / Unconfirmed GUEST, unregistred user! 2009-05-12 #5 我刚写了个代码测试下,效率效果都还行啊.....就是如果图层多了会有点卡 呵呵
火 火焰领主打伞 Unregistered / Unconfirmed GUEST, unregistred user! 2009-05-12 #6 楼上的,不必每次都建一个IMAGE,只有添加的时候才建立一个。如果要组合,把添加的IMAGE 添加上,然后截图,把截的图再新建一个IMAGE添加到上面,设置最高层。取消组合时则把最上的给VISIBLE := FALSE;即可。
楼上的,不必每次都建一个IMAGE,只有添加的时候才建立一个。如果要组合,把添加的IMAGE 添加上,然后截图,把截的图再新建一个IMAGE添加到上面,设置最高层。取消组合时则把最上的给VISIBLE := FALSE;即可。
H hs-kill Unregistered / Unconfirmed GUEST, unregistred user! 2009-05-12 #7 啊....没理解....不过我刚才改了改,实际只用到一个image,另外每个线条存一个png对象鼠标点击选择的时候先判断下方像素是否是背景色,如果不是背景色就循环找png对象,找到当前点的像素和选择的像素相同的png对象,然后做移动缩放什么的最后把所有png对象都合到一起画到image上,这样不会卡但是会出现一个问题,如果缩放以后产生半透明的部分和另一个图层图像叠加后就不好判断了.....
啊....没理解....不过我刚才改了改,实际只用到一个image,另外每个线条存一个png对象鼠标点击选择的时候先判断下方像素是否是背景色,如果不是背景色就循环找png对象,找到当前点的像素和选择的像素相同的png对象,然后做移动缩放什么的最后把所有png对象都合到一起画到image上,这样不会卡但是会出现一个问题,如果缩放以后产生半透明的部分和另一个图层图像叠加后就不好判断了.....
X xuegaoyili Unregistered / Unconfirmed GUEST, unregistred user! 2009-05-12 #8 通过像素点颜色找不成吧.我是想实现组合图形,然后就可以一起移动缩放.两个被组合的图形是不要求颜色一样的.而且取消组合后,还是二个独立的图不过还是要谢谢有人捧场.一起研究一下
H hs-kill Unregistered / Unconfirmed GUEST, unregistred user! 2009-05-12 #9 恩....如果不根据颜色找图层....可以考虑像PS那样,鼠标右键点击后,判断当前点在哪些图层范围里,把所有图层都列出来显示到一个菜单里,自己选择
H hendriclee Unregistered / Unconfirmed GUEST, unregistred user! 2009-05-13 #10 http://www.hellocpp.net/Articles/Article/145.aspx希望这个能有所帮助
X xuegaoyili Unregistered / Unconfirmed GUEST, unregistred user! 2009-05-18 #11 设计思想已经有了.现在公开和大家一起学习.我的想法是,在数据结构上应用treenode结构,每画或插入一个图形,就在数据结构上创建一个node,保存此图形对象,然后,用户每选择一些图形进行组合,就创建一个节点表示组合后的图形,把所选的图形节点移到此节点下做为其子节点.表示一个组合图形.取消组合就是把组合图形节点删除,把其子节点上移到根节点上,又恢复成独立图形节点.
设计思想已经有了.现在公开和大家一起学习.我的想法是,在数据结构上应用treenode结构,每画或插入一个图形,就在数据结构上创建一个node,保存此图形对象,然后,用户每选择一些图形进行组合,就创建一个节点表示组合后的图形,把所选的图形节点移到此节点下做为其子节点.表示一个组合图形.取消组合就是把组合图形节点删除,把其子节点上移到根节点上,又恢复成独立图形节点.
S smithxiang Unregistered / Unconfirmed GUEST, unregistred user! 2009-06-23 #12 可以做成结果数组,结构中有个记录图层与组合的两个记录。显示,操作都循环读数组就可以了