我正在寻找一种方法来在ActionScript 3中构建一个类似photoshop的绘图工具,特别是我想在photoshop中构建类似画笔的东西。这样您就可以使用不同的PNG作为画笔。
我尝试过在photoshop中将画笔保存为透明的png,将其导入到我的AS3项目中,并使用鼠标移动事件,每次将鼠标移动到bitmapdata对象中时绘制png。但这看起来不像photoshop。下面是一个例子,首先是photoshop绘图,然后是as3绘图:


在photoshop中,它看起来非常平滑,但在as3中,你会看到丑陋的角落和颜色变化。有人知道解决方案吗?
thx,tux
发布于 2010-09-01 21:11:08
更具体地说:您应该在每次触发mouseDown时创建一个临时位图。在这个选项上,画笔将被绘制为黑白-这将产生更平滑的结果,例如,当您使绘制的画笔在alpha中不满时。还有-这里你必须使用“行走”技术,正如grapefrukt所说的那样。
最后,一旦触发了mouseUp事件,您必须对位图重新着色(用于画笔颜色),如果需要,可以添加一些滤镜并将其绘制在主位图上。
发布于 2012-11-15 02:43:45
答案是Flash绘制具有预乘alpha透明度的bitmapData。Flash基本上通过将接近透明的像素舍入到另一个值来节省内存。除非你一遍又一遍地将图像堆叠在一起,否则人眼是看不到的。这会导致颜色的舍入误差,看起来几乎像笔刷烧焦的边缘。
正如其他人所指出的,你肯定需要在鼠标位置之间“移动”画笔,但这不会考虑到当你将图像堆叠在一起时发生的颜色偏移。
而是将画笔笔触绘制到透明位图中,并使用colorTransform方法将新图层着色为所选颜色。当鼠标向上移动时,将该透明层绘制到画布中。(不要忘记在不使用时删除多余的层!)
发布于 2010-09-01 20:27:51
这是因为Photshop“遍历”鼠标坐标和绘制的距离。因此,即使你在两点之间快速移动鼠标,你也会得到一条连贯的线。
每次鼠标更新你只绘制一次,所以如果鼠标移动得很快,你会得到斑点而不是线条。
您可以通过跟踪上次鼠标更新的位置来解决此问题,如果在额外的步骤中绘制之间的距离太远。
https://stackoverflow.com/questions/3616902
复制相似问题