getColorBoundsRect() BitmapData摳圖

爲何要去扣圖?優化

扣圖的通常應用主要是爲了處理一些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() 經過這個方法

能夠很方便排除不想要的顏色值來獲取實際須要的圖像,

原理跟上邊說的大體同樣。

相關文章
相關標籤/搜索