Flash 擦除位图的特定选定部分
我正在构建一个闪光涂料应用程序。基本结构是这样的 我有两个层,即Flash 擦除位图的特定选定部分,flash,actionscript-3,Flash,Actionscript 3,我正在构建一个闪光涂料应用程序。基本结构是这样的 我有两个层,即topLayer\u mc和bottomLayer\u mc。实际的矢量图形绘制在顶层和工具的onmouseUp上,获取顶层矢量图形的位图副本,并将其作为位图添加到底层。随后清除顶层。它正在为铅笔工具工作 现在我需要创建一个橡皮擦工具。这就是事情变得棘手的地方。在应用程序中,有一个将图像保存为png的选项,因此必须保留alpha。因此,传统的用矢量画笔和用位图画笔的方法是行不通的。当然,在视觉层面上,如果使用矢量绘制的笔刷与背景具有
topLayer\u mc
和bottomLayer\u mc
。实际的矢量图形绘制在顶层和工具的onmouseUp
上,获取顶层矢量图形的位图副本,并将其作为位图添加到底层。随后清除顶层。它正在为铅笔工具工作
现在我需要创建一个橡皮擦工具。这就是事情变得棘手的地方。在应用程序中,有一个将图像保存为png的选项,因此必须保留alpha。因此,传统的用矢量画笔和用位图画笔的方法是行不通的。当然,在视觉层面上,如果使用矢量绘制的笔刷与背景具有相同的颜色,那么它将起作用
我需要的是彻底清除像素
现在我已经用传统的技术创建了一个画笔工具,清除是可能的,但我需要的是准确地擦除像素。画这个有什么技巧吗
这是我正在使用的代码:
我还上传了swf和源代码
试玩时,请用铅笔在整个舞台上画画(按铅笔按钮开始画画)
还提供了源fla
我已经努力了一段时间,如果你能帮助我,我将不胜感激
topLayer\u mc
和bottomLayer\u mc
现在将alpha设置为零
我也没有创建一个可拖动的笔刷,只清除了两个硬编码的位置。要用铅笔画画,只需按下铅笔按钮并画画。要清除,只需按橡皮擦按钮
我需要的是一种擦除画笔标记区域中像素的技术,而不仅仅是在上面画画 绘制透明像素(任何alpha值为0的颜色)就可以了 绘制透明像素(任何alpha值为0的颜色)就可以了 我想我应该创建第三个透明剪辑用于擦除。当你在按住擦除工具的同时点击它时,只需在上面画上一个圆圈。我想我应该创建第三个透明剪辑来擦除。当您在按住擦除工具的同时单击它时,只需在其上画一个圆圈。如果您仔细阅读AS3文档,您会发现一些有意义的东西。首先,您正在尝试使用blendmode“erase”(blendmode.erase)进行绘制,这仅在DisplayObject父位图将其blendmode从flash.display.blendmode.NORMAL更改为flash.display.blendmode.LAYER时有效。如果确实要使用擦除模式,出于兼容性原因,我建议使用常量flash.display.BlendMode.erase而不是硬编码文字“erase”
但是。。您可能不打算使用BlendMode.ERASE,您是否在完全了解其工作原理的情况下故意选择了它?不必对BitmapData使用此混合模式。擦除工具在BitmapData.draw()操作中使用BlendMode.NORMAL,并绘制颜色为0x00000000的透明像素就足够了,您可以通过指定beginFill(0x000000,0)获得该像素 如果你仔细阅读AS3文档,你会发现一些重要的东西。首先,您正在尝试使用blendmode“erase”(blendmode.erase)进行绘制,这仅在DisplayObject父位图将其blendmode从flash.display.blendmode.NORMAL更改为flash.display.blendmode.LAYER时有效。如果确实要使用擦除模式,出于兼容性原因,我建议使用常量flash.display.BlendMode.erase而不是硬编码文字“erase”
但是。。您可能不打算使用BlendMode.ERASE,您是否在完全了解其工作原理的情况下故意选择了它?不必对BitmapData使用此混合模式。擦除工具在BitmapData.draw()操作中使用BlendMode.NORMAL,并绘制颜色为0x00000000的透明像素就足够了,您可以通过指定beginFill(0x000000,0)获得该像素 您可以创建一个位图,用
绿色矩形
填充它,然后在其中绘制一个红色填充圆
。现在,您可以使用复制频道,将源频道用作绿色
,将目标频道用作Alpha
。因此,它最终将使用圆形笔刷创建擦除效果您可以创建位图,用绿色矩形
填充,然后在其中绘制红色填充圆
。现在,您可以使用复制频道,将源频道用作绿色
,将目标频道用作Alpha
。因此,它最终将使用圆形笔刷创建擦除效果。我希望你看到了密码。我刚刚在那里更改了gfx.beginll行(0xcccc,1);到gfx.beginll(0xCCCC,0);但这没有帮助。我希望这就是你的意思。或者我还需要做其他事情。由于代码中的BitmapData.draw()调用指定了BlendMode.ERASE而不是BlendMode.NORMAL,所以它不起作用。我补充了一个更完整的解释。嗨,戴。我希望你看到了密码。我刚刚在那里更改了gfx.beginll行(0xcccc,1);到gfx.beginll(0xCCCC,0);但这没有帮助。我希望这就是你的意思。或者我还需要做其他事情。由于代码中的BitmapData.draw()调用指定了BlendMode.ERASE而不是BlendMode.NORMAL,所以它不起作用。我添加了一个更完整解释的答案。@Timofei Davydik。对不起,兄弟,我不知道。是我开始的