【问题标题】:BitmapData constructor default seems to conflictBitmapData 构造函数默认似乎冲突
【发布时间】:2011-08-08 17:24:51
【问题描述】:

根据我在这里给出的答案: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) — 指定位图图像是否支持逐像素透明度。默认值为真(透明)。要创建完全透明的位图,请将 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

谁能向我解释当前构造函数的好处是什么?

【问题讨论】:

    标签: actionscript-3 constructor bitmapdata


    【解决方案1】:

    当前构造函数没有任何好处——它只是默认的 Adob​​e 模式——我假设他们不希望人们抱怨在绘制显示对象、影片剪辑等时,位图包含背景。老实说——我认为不做默认设置会更有意义,但这正是他们选择的,我们必须遵守。

    如果你真的想稍微提高速度并且不想指定构造函数,请创建一个定义了该 ctor 的最终子类:

    public final class Surface extends BitmapData {
        public function Surface(width:int, height:int, fillColor:uint = 0x000000):void {
            super(width, height, false, fillColor);
        }    
    }
    

    【讨论】:

      猜你喜欢
      • 2011-10-15
      • 2021-04-03
      • 1970-01-01
      • 2016-07-23
      • 2023-03-20
      • 2012-04-05
      • 2010-10-30
      • 2014-05-15
      • 2011-03-12
      相关资源
      最近更新 更多