继续我在这里给出的回答:AS 3 | Cloning Png image data
我知道要获得透明的BitmapData对象,必须指定黑色的背景颜色,但在我被召唤之前,我从不打扰检查原因。检查后,我想知道是否有一个原因我没有看到似乎与BitmapData构造函数的冲突默认参数?
首先,这是文档中定义的构造函数:
public function BitmapData(width:int, height:int, transparent:Boolean = true, fillColor:uint = 0xFFFFFFFF)
请注意透明度的默认值为true。现在考虑文档对透明参数的说法:
transparent:Boolean(default = true) - 指定位图图像是否支持逐像素透明度。默认值为true(透明)。要创建完全透明的位图,请将transparent参数的值设置为true,将fillColor参数的值设置为0x00000000(或0)。将transparent属性设置为false可以显着提高渲染性能。
似乎除非您将填充颜色设置为黑色,否则此参数无效。那么为什么默认的fillColor值为0xFFFFFFFF?
这对我来说似乎不对。如果开发人员想要没有alpha通道的性能增益,则必须明确指定:
var bmd:BitmapData = new BitmapData(width,height,false);
如果需要透明的BitmapData,那么也必须明确指定:
var bmd:BitmapData = new BitmapData(width,height,true,0x000000);
因此,在任何时候我们都不能依赖最短的构造函数形式,而不会接受性能损失,我无法理解为什么。当然fillColor应该默认为黑色:
var bmd:BitmapData = new BitmapData(width,height); // transparent BitmapData
或透明度应默认为false:
var bmd:BitmapData = new BitmapData(width,height); // faster, no-alpha BitmapData
任何人都可以向我解释当前构造函数的好处是什么?
答案 0 :(得分:0)
当前构造函数没有任何好处 - 它只是Adobe模式的默认设置 - 我假设他们不希望有人抱怨在绘制displayobjects,movieclips等时,位图包含背景。老实说 - 我认为没有违约会更有意义,但这正是他们所选择的,我们必须遵守它。
如果你真的想要提高速度并且不想指定那个构造函数,那么创建一个定义了ctor的最终子类:
public final class Surface extends BitmapData {
public function Surface(width:int, height:int, fillColor:uint = 0x000000):void {
super(width, height, false, fillColor);
}
}