我正在寻找一种在ActionScript 3中构建类似绘图工具的Photoshop的方法。特别是我想在photoshop中构建像画笔一样的东西。这样你就可以使用不同的PNG作为画笔。
我尝试将它作为透明png保存在Photoshop中,将其导入我的AS3项目并使用鼠标移动事件,每次将鼠标移动到bitmapdata对象时绘制png。 但这看起来不像是photoshop。这是一个例子,首先是photoshop绘图,然后是as3绘图:
在Photoshop中它看起来非常流畅,但在as3中你有那些丑陋的角落和颜色变化。 有谁知道解决方案?
thx,tux
答案 0 :(得分:3)
答案是Flash使用预先乘以的alpha透明度绘制bitmapData。 Flash基本上通过将近乎透明的像素四舍五入到另一个值来节省内存。除非您将图像一遍又一遍地堆叠在一起,否则人眼几乎察觉不到。这导致颜色的圆角误差看起来几乎像刷子的烧焦边缘。
你肯定需要像其他人注意到的那样在鼠标位置之间“走动”画笔,但是当你将图像堆叠在一起时,它不会处理颜色转移。
而是将画笔笔划绘制到透明位图中,并使用colorTransform方法将新图层着色为所选颜色。鼠标向上时,将该透明图层绘制到画布中。 (不要忘记在不使用时删除额外的图层!)
答案 1 :(得分:2)
这是因为Photshop“走”了鼠标坐标之间的距离并且也绘制了它。因此,即使您在两点之间快速移动鼠标,您也会得到一条连贯的线。
每次鼠标更新时,您只需绘制一次,因此如果鼠标移动速度非常快,您将获得斑点而不是线条。
您可以通过跟踪上次鼠标更新的位置来解决这个问题,如果在额外步骤中油漆之间的距离太远,也可以解决这个问题。
答案 2 :(得分:0)
更具体一点:每次触发mouseDown时都应该创建一个临时位图。在这种情况下,画笔将以黑白绘制 - 这将产生更平滑的结果,例如当您使绘制的画笔在alpha中不完整时。此外 - 在这里你将不得不使用“走路”技术,正如grapefrukt所说。
最后,一旦触发mouseUp事件,你必须重新着色位图(对于画笔颜色),如果你愿意,可以添加一些过滤器并在主位图上绘制它。