0

我正在寻找一种在 ActionScript 3 中构建类似 Photoshop 绘图工具的方法。尤其是我想在 Photoshop 中构建类似画笔的东西。这样您就可以使用不同的PNG作为画笔。

我尝试在 Photoshop 中将画笔保存为透明 png,将其导入我的 AS3 项目并使用鼠标移动事件,每次将鼠标移动到位图数据对象时绘制 png。但这看起来不像Photoshop。这是一个示例,首先是 Photoshop 绘图,然后是 as3 绘图:

替代文字

替代文字

在 Photoshop 中,它看起来非常平滑,但在 as3 中,您会遇到难看的边角和颜色偏移。有谁知道解决方案?

谢谢,晚礼服

4

3 回答 3

3

答案是 Flash 使用预乘 alpha 透明度绘制 bitmapData。Flash 基本上通过将几乎透明的像素四舍五入到另一个值来节省内存。人眼无法察觉,除非您将图像一遍又一遍地堆叠在一起。这会导致颜色的舍入误差,看起来几乎就像画笔的烧焦边缘。

正如其他人所指出的那样,您肯定需要在鼠标位置之间“走动”画笔,但这不会解决当您将图像堆叠在一起时发生的颜色变化。

而是将您的笔触绘制到一个透明位图中,并使用 colorTransform 方法将该新图层着色为您选择的颜色。当您向上移动鼠标时,将该透明层绘制到您的画布中。(不要忘记在不使用时删除额外的层!)

于 2012-11-14T18:43:45.477 回答
2

这是因为 Photshop 会“走”鼠标坐标之间的距离并对其进行绘制。因此,即使您在两点之间快速移动鼠标,您也会得到一条连贯的线。

每次鼠标更新你只画一次,所以如果鼠标移动得非常快,你会得到点而不是线。

您可以通过跟踪最后一次鼠标更新的位置以及在额外步骤中绘制之间的距离是否太远来解决此问题。

于 2010-09-01T12:27:50.753 回答
0

更具体地说:您应该在每次触发 mouseDown 时制作一个临时位图。在此画笔将以黑色和白色绘制 - 这将产生更平滑的结果,例如当您使绘制的画笔未满 alpha 时。另外-正如grapefrukt所说,在这里您将不得不使用“行走”技术。

最后,一旦触发 mouseUp 事件,您必须重新着色位图(用于画笔颜色),如果需要,可能添加一些过滤器并将其绘制在主位图上。

于 2010-09-01T13:11:07.690 回答