Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash 擦除位图的特定选定部分_Flash_Actionscript 3 - Fatal编程技术网

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。对不起,兄弟,我不知道。是我开始的