2011-08-08 38 views
1

從一個答案我給這裏繼:AS 3 | Cloning Png image data的BitmapData構造函數的默認似乎發生衝突

我知道,要得到一個透明的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)。將透明屬性設置爲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

當前的構造函數沒有什麼好處 - 它只是Adobe模式的默認值 - 我假設他們不想讓人們抱怨繪製displayobjects,movieclips等時,位圖包含背景。說實話 - 我認爲不做任何默認會更有意義,但這正是他們選擇的,我們必須遵守它。

如果你真的想要一個較小的速度增長,並且不希望指定的構造函數,創建定義構造函數最後的子類:

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