爲何要去扣圖?優化
扣圖的通常應用主要是爲了處理一些png圖片的大小問題,ui
bitmapdata的大小消耗是bitmapdata的高寬大小決定的,設計
由於一張png圖包含的透明部分而設計每每懶於將每張圖片都作到最小,圖片
因此通常這部分應該使用程序實現的,咱們能夠編寫一個air項目對圖片進行批處理,get
也能夠根據實際在程序運行期間實現對圖像大小的優化。
it
怎麼樣去扣圖?原理
主要方法用到getColorBoundsRect來獲取非透明區域的大小,map
getColorBoundsRect的參數能夠方便的讓咱們賽選出非透明區域程序
處理過程以下:bitmapdata.getColorBoundsRect(0xFF000000,0x00000000,false) ,方法
爲何要定義這樣兩個參數來排除區域?
首先,png圖是ARGB制式除了紅綠藍3通道外還帶一alpha的透明通道 ,
一個16進制的通道值大體是0xAARRGGBB ,除0x外每兩個數表明一組,
前兩個表明通明通道,ff是最大值,00是最小值,其餘3通道同樣。
getColorBoundsRect參數的說明以下:
mask:uint — 一個十六進制值,指定要考慮的 ARGB 顏色的位。
經過使用 &(按位 AND)運算符,將顏色值與此十六進制值合併。
color:uint — 一個十六進制值,指定要匹配(若是 findColor 設置爲 true)或不 匹配(若是 findColor 設置爲 false)的 ARGB 顏色。
findColor:Boolean (default = true) — 若是該值設置爲 true,則返回圖像中顏色值的範圍。 若是該值設置爲 false,
則返回圖像中不存 上邊的0xFF000000表明的是透明度最大,0x00000000表明的是徹底透明的
經過對 getColorBoundsRect參數的理解 咱們知道 mask是一個顏色值合併參數,
他會先對bitmapdata的全部像素進行合併,而後根據第二個匹配參數
也就是徹底透明的的值進行匹配,最後根據findColor返回匹配的結果,
正果過程就是將bitmapdata的全部像素匹配徹底透明值,返回非透明的實際矩形範圍。
這樣子就能夠獲得所須要的實際包圖像範圍了~ 再來就是扣圖,
扣圖咱們用到BitMapData.threshold() 經過這個方法
能夠很方便排除不想要的顏色值來獲取實際須要的圖像,
原理跟上邊說的大體同樣。