Error #2077: This filter operation cannot be performed with the specified input parameters.
at flash.display::BitmapData/applyFilter()
我收到此错误消息,尝试通过BitmapFilter
DropShadowFilter
(特别是内部BitmapData
)应用于.applyFilter
我之前从未见过这条消息,谷歌搜索没有立即回答这个问题,我看到有人对为什么它应用于JPEG而不是PNG图像感到困惑。所以希望这个问题可以帮助别人。我将在下面提供我的简单解决方案。
答案 0 :(得分:0)
阅读BitmapData.applyFilter documentation,问题显而易见。我尝试将DropShadowFilter应用于没有透明度的BitmapData(也就是说,没有alpha通道,每个像素只有24位。)文档说明哪些过滤器需要透明度(为方便起见,这里复制):
每种类型的过滤器都有一定的要求,如下:
BlurFilter - 此过滤器可以使用不透明或透明的源和目标图像。如果图像的格式不匹配,则在过滤期间生成的源图像副本将与目标图像的格式匹配。
BevelFilter,DropShadowFilter,GlowFilter,ChromeFilter - 这些过滤器的目标图片必须是透明图片。调用DropShadowFilter或GlowFilter会创建一个包含投影或发光的Alpha通道数据的图像。它不会在目标图像上创建投影。如果您将任何这些过滤器与不透明的目标图像一起使用,则会抛出异常。
ConvolutionFilter - 此过滤器可以使用不透明或透明的源图像和目标图像。
ColorMatrixFilter - 此过滤器可以使用不透明或透明的源图像和目标图像。
DisplacementMapFilter - 此过滤器可以使用不透明或透明的源图像和目标图像,但源图像格式和目标图像格式必须相同。
创建具有透明度的BitmapData
很容易 - 它是构造函数的第3个参数:
// args are: width, height, is_transparent, default_color
var bd:BitmapData = new BitmapData(1024, 768, true, 0xff000000);
请注意,在创建透明BitmapData时,必须为默认颜色(第4个参数)指定32位整数。如果您只指定0xffffff(24位白色),则会得到一个空白图像,因为alpha值(最高8位)为0。