擦除位图的特定选定部分

时间:2011-04-20 14:05:06

标签: flash actionscript-3

我正在构建一个Flash Paint应用程序。基本结构是这样的。

我有两层,topLayer_mcbottomLayer_mc。实际的矢量绘图绘制在工具的顶层和onmouseUp上,顶层上的矢量图形的位图副本被采用并作为位图添加到底层。随后清除顶层。它适用于铅笔工具。

现在我需要创建一个橡皮擦工具。这是事情变得棘手的地方。在应用程序中有一个选项将图像保存为png,因此alpha保留最高。所以使用矢量绘制画笔和使用位图绘制方法的传统方法是行不通的。当然,在视觉水平上,如果使用矢量绘制的画笔具有与背景相同的颜色,则它将起作用。

我需要的是激发擦除像素。

现在我已经使用传统技术创建了一个画笔工具并且可以清除,但我需要的是准确地擦除像素。是否有一些技巧来绘制这个?

这是我正在使用的代码:

我还上传了swf和源代码,

http://bobbythecoder.blogspot.com/2011/04/doubt-bitmap.html

尝试时,请使用铅笔在整个舞台上画画(按铅笔按钮并开始画画)

还提供了源fla,

http://www.easy-share.com/1914823453/Paint Brush Expt.fla

我已经努力了一段时间,所以如果你能提供帮助,我们将不胜感激。

topLayer_mcbottomLayer_mc现在将alpha设置为零。

我还没有创建一个可拖动的画笔,只清除了两个硬编码的位置。要使用铅笔绘图,只需按下铅笔按钮并绘制即可。要清除,只需按橡皮擦按钮即可。

我需要的是一种技术来擦除画笔标记区域中的像素而不仅仅是画在它上面。

4 个答案:

答案 0 :(得分:2)

如果您选择AS3文档,您会发现一些重要的事情。首先,您尝试使用blendmode“erase”( BlendMode.ERASE )进行绘制,这只有在DisplayObject父Bitmap将其blendMode从 flash.display.BlendMode更改时才有效。正常 flash.display.BlendMode.LAYER 。如果您打算使用擦除模式,我建议使用常量flash.display.BlendMode.ERASE而不是硬编码文字“擦除”,以实现向前兼容性。

但是......你可能不打算使用 BlendMode.ERASE ,你是否故意在完全了解其工作原理的情况下选择它?没有必要将此混合模式与BitmapData一起使用。擦除工具应该足以使用 BlendMode.NORMAL 和BitmapData.draw()操作,并绘制颜色为0x00000000的透明像素,您可以通过指定beginFill(0x000000,0)获得;

答案 1 :(得分:1)

绘制透明像素(任何带有0 alpha的颜色)应该可以解决问题!

答案 2 :(得分:1)

您可以创建位图,用green rectangle填充,然后在其中绘制red fill circle。现在,您可以使用 copyChannel ,将源渠道用作GREEN,将目标渠道用作Alpha。因此,最终会使用圆形画笔创建擦除效果。

答案 3 :(得分:0)

我想我会创建第三个用于删除的透明剪辑。当你拿着擦除工具点击它时,只需在上面加上圆圈。