阅读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。