0
Error #2077: This filter operation cannot be performed with the specified input parameters.
  at flash.display::BitmapData/applyFilter()

我收到此错误消息,试图将 a BitmapFilter(特别是 inner DropShadowFilter)应用于BitmapDatavia.applyFilter

我以前从未见过这条消息,谷歌搜索也没有立即回答这个问题,我看到有人对为什么它适用于 JPEG 而不是 PNG 图像感到困惑。所以希望这个问题对其他人有帮助。我将在下面包含我的简单解决方案。

4

1 回答 1

0

阅读BitmapData.applyFilter 文档,很明显问题出在哪里。我尝试将 DropShadowFilter 应用于没有透明度的 BitmapData(也就是没有 alpha 通道,每个像素只有 24 位。)文档说明哪些过滤器需要透明度(为方便起见,在此处复制):

每种类型的过滤器都有一定的要求,如下:

  • BlurFilter — 此过滤器可以使用不透明或透明的源图像和目标图像。如果图像的格式不匹配,则在过滤期间制作的源图像副本与目标图像的格式匹配。

  • BevelFilter、DropShadowFilter、GlowFilter、ChromeFilter — 这些滤镜的目标图像必须是透明图像。调用 DropShadowFilter 或 GlowFilter 会创建一个包含投影或发光的 Alpha 通道数据的图像。它不会在目标图像上创建投影。如果您将这些过滤器中的任何一个用于不透明的目标图像,则会引发异常。

  • ConvolutionFilter - 此过滤器可以使用不透明或透明的源图像和目标图像。

  • ColorMatrixFilter — 此过滤器可以使用不透明或透明的源图像和目标图像。

  • DisplacementMapFilter - 此过滤器可以使用不透明或透明的源图像和目标图像,但源图像和目标图像格式必须相同。

创建一个BitmapData透明的很容易 - 它是构造函数的第三个参数:

// 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。

于 2013-10-30T23:03:11.120 回答