BitMapData知識 轉

Bitmap和BitmapData

2010.5.25 smartblack整理

一、flash.display.Bitmap類及其兩個子類

1、繼承自DisplayObject,和InteractiveObject平級,所以無法調度鼠標事件,可以使用額外的包裝容器(Sprite)來實現偵聽。

2、只支持GIF、JPEG、PNG格式,不支持BMP(網上已有解決方法)

3、構造函數:?Bitmap(bitmapData:BitmapData = null, pixelSnapping:String = "auto", smoothing:Boolean = false),pixelSnapping是自動緊貼,smoothing是平滑處理

4、Bitmap類的子類mx.core.FlexBitmap:覆蓋了toString(),用于指示對象在應用程序的DisplayObject層次結構中所處的位置。

5、FlexBitmap的子類mx.core.BitmapAsset:實現了IFlexAsset、IFlexDisplayObject接口。在FLEX應用程序中,通常不必直接使用此類,MXML編譯器會自動生成,比如:

<mx:Image id = “logo” source = “@Embed(source = ‘Logo.gif’)”/>

不過,在AS級別,則可以對圖片進行更多的操作(比如使用BitmapData類的一些方法):

[Bindable]

[Embed(source = “Logo.gif”)]

private var logoClass:Class;

var logo:BitmapAsset = BitmapAsset(new logoClass());

logo.bitmapData.noise(4);

<mx:Image id = “logo” source = “{logoClass}”/>

?

二、flash.display.BitmapData類及常用類方法簡介

1、繼承自Object,可以看作一個專門用來存儲位圖像素點陣信息的數組。比如大小100x100的位圖,其BitmapData就相當于一個100x100的二維數組,對應存儲了10000像素的顏色值。這個顏色值是一個32位的ARGB值,用uint整數類型表示,即alpha 和red green blue 三原色。0xFF669900代表不透明的橙色,其中FF表示16進制的最大數,alpha值的范圍也就在0x00-0xFF之間,比如十六進制80就是十進制的128,也就是透明度256的一半。

2、構造函數:BitmapData(width:int, height:int, transparent:Boolean = true,fillColor:unit = 0xFFFFFFFF),width?和?height?參數指定位圖的大小,二者的最大值都是 2880 像素。transparent是透明度,設置為false時,顏色值僅使用24位的RGB值,這可以略微提升呈現性能。但需要注意的是,設置為不透明位圖后,將無法再更改為透明位圖。fillColor是用于填充位圖區域的?32?位?ARGB?顏色值,默認為0xFFFFFFFF(純白色)。

3、像素處理(參考http://www.skill8.net/article.asp?id=15)

處理單個像素: 獲取要處理的區域中包含的像素的顏色值。使用 getPixel() 方法可讀取這些單個的像素值。 getPixel() 方法從作為參數傳遞的一組 x, y(像素)坐標中檢索 RGB 值。 getPixel32() 返回的值包含表示所選像素的 Alpha 通道(透明度)值的附加數據。 同理設置單個像素: 如果只想更改位圖中包含的某個像素的顏色或透明度,則可以使用 setPixel() 或 setPixel32() 方法。若要設置像素的顏色,只需將 x, y 坐標和顏色值傳遞到這兩種方法之一即可。?
設置某個區域請使用 getPixels() 方法。此方法從作為參數傳遞的矩形像素數據區域中生成字節數組。字節數組的每個元素(即像素值)都是無符號的整數(32 位未經相乘的像素值)。 相反,為了更改(或設置)一組像素值,請使用 setPixels() 方法。此方法需要聯合使用兩個參數(rect 和 inputByteArray)來輸出像素數據 (inputByteArray) 的矩形區域 (rect)。 從 inputByteArray 中讀取(或寫入)數據時,會為數組中的每個像素調用 ByteArray.readUnsignedInt() 方法。如果由于某些原因,inputByteArray 未包含像素數據的整個矩形,則該方法會停止處理該點處的圖像數據。 必須記住的是,對于獲取和設置像素數據,字節數組需要有 32 位 Alpha、紅、綠、藍 (ARGB) 像素值。?

4、像素級別沖突檢測

這個有什么用?我有一個對象需要判斷是否和PNG圖片碰撞,但是PNG圖片的邊緣是透明的時候,這個就有用了。

BitmapData.hitTest() 方法可以在位圖數據和另一個對象或點之間執行像素級別沖突檢測。

?

hitTest(firstPoint:Point, firstAlphaThreshold:uint, secondObject:Object, secondBitmapDataPoint:Point = null, secondAlphaThreshold:uint = 1):Boolean

?

firstPoint (Point):此參數指在其上執行點擊測試的第一個 BitmapData 的左上角的像素位置。

firstAlphaThreshold (uint):此參數指定對于此點擊測試視為不透明的最高 Alpha 通道值。

secondObject (Object):此參數表示影響區域。secondObject 對象可以是 Rectangle、Point、Bitmap 或 BitmapData 對象。此對象表示在其上執行沖突檢測的點擊區域。

secondBitmapDataPoint (Point):此可選參數用于在第二個 BitmapData 對象中定義像素位置。只有當 secondObject 的值為 BitmapData 對象時,才使用此參數。默認值為 null。

secondAlphaThreshold (uint):此可選參數表示在第二個 BitmapData 對象中視為不透明的最高 Alpha 通道值。默認值為 1。只有當 secondObject 是一個 BitmapData 對象且兩個 BitmapData 對象都透明時,才使用此參數。

5、applyFilter添加濾鏡、fillRect使用指定顏色填充一個矩形像素區域

http://hi.baidu.com/%B0%B5%BA%DA%B2%E0%CE%C0/blog/item/cb78f89bae3558bcc9eaf401.html

6、draw(source:IBitmapDrawable, matrix:Matrix = null, colorTransform:ColorTransform = null, blendMode:String = null, clipRect:Rectangle = null, smoothing:Boolean = false):void

將source對象繪制到BitmapData對象里。其中,DisplayObject和BitmapData類實現了IBitmapDrawable接口。clipRect是對源對象的裁剪,不指定則會繪制整個源對象。另外,注意跨域的問題。

應用:保存圖片,保存當前屏幕顯示內容等。參考http://wangcheng.iteye.com/blog/129007

?

7、getColorBoundsRect(mask:uint, color:uint, findColor:Boolean = true):Rectangle

mask:uint一個十六進制值,指定要考慮的 ARGB 顏色的位。通過使用 &(按位 AND)運算符,將顏色值與此十六進制值合并。

color:uint一個十六進制值,指定要匹配(如果 findColor 設置為 true)或不 匹配(如果 findColor 設置為 false)的 ARGB 顏色。

findColor:Boolean (default = true)如果該值設置為 true,則返回圖像中顏色值的范圍。如果該值設置為 false,則返回圖像中不存在此顏色的范圍。

應用:獲得一個DisplayObject的真實寬高(去除透明部分)

function getRealWH(source:DisplayObject):Rectangle{

copy = new BitmapData(source.width,source.height,false,0xFF0000);

copy.draw(source);

return copy.getColorBoundsRect(0xFFFFFF,0xFF0000,false);

}

具體思路就是,將BitmapData背景設為紅色,將source對象draw上去,然后獲取非紅色部分的邊框。

8、同一個BitmapData對象可能被多個Bitmap對象持有,那么一旦BitmapData改變,所有的Bitmap對象都將受到影響,為了避免這種情況,可以用BitmapData對象提供的clone()方法生成當前BitmapData對象的拷貝。

?

三、Bitmap和BitmapData的綜合描述

1、將Bitmap位圖對象和BitmapData位圖信息分開,是為了讓位圖呈現操作與Flash Player的內部顯示更新例程分隔開來,不會因為連續的繪制導致額外的每幀開銷。

2、當應用程序需要將位圖圖像保存到本地或發送到服務端時, 通常的方法是在發送數據前將圖像通過PNG或JPEG編碼。如果只是想保存位圖圖像,只要序列化BitmapData即可,將圖像轉換為 JPEG/PNG是完全沒有必要的。參見[AS3]Bitmap序列化(將BitmapData保存為原生Binary/ByteArray)

地址:http://space.flash8.net/space/?388361/viewspace-468245.html

?

四、附記

1、位圖與矢量圖的概念及區別?

矢量圖(vector):矢量圖形是以數學方式生成的幾何形狀,這些圖形的元素是一些點、線、矩形、多邊形、圓和弧線等等,它們都是通過數學公式計算獲得的。眾所周知Flash就是一款矢量動畫制作軟件。在AS中使用的填充(beginFill),畫線(lineTo)等命令都是基于對矢量圖的操作。

位圖(Bitmap):位圖圖形也稱為光柵圖形,由排列為矩形網格形式的小方塊(像素)組成。簡單地說,位圖就是以無數的色彩點組成的圖案。?兩者比較:

矢量圖可以無限放大,而且不會失真; 而位圖會失真。

位圖由像素組成而矢量圖由矢量線組成。

位圖可以表現的色彩比較多;而矢量圖則相對較少。

矢量圖體積小,但比較消耗計算資源;位圖則比較消耗內存資源,但對計算資源消耗小。

?

位圖圖像用圖像的寬度和高度來定義,以像素為量度單位,每個像素包含的位數表示像素包含的顏色數。在使用?RGB?顏色模型的位圖圖像中,像素由三個字節組成:紅、綠和藍。每個字節包含一個?0?至?255?之間的值。將字節與像素合并時,它們可以產生與藝術混合繪畫顏色相似的顏色。例如,一個包含紅色字節值?255、綠色字節值?102?和藍色字節值?0?的像素可以形成明快的橙色。

位圖圖像的品質由圖像分辨率和顏色深度位值共同確定。分辨率與圖像中包含的像素數有關。像素數越大,分辨率越高,圖像也就越精確。顏色深度又叫色彩位數,與像素可包含的信息量有關。即位圖中要用多少個二進制位來表示每個點的顏色,是分辨率的一個重要指標。常用有1位(單色),2位(4色,CGA),4位(16色,VGA),8位(256色),16位(增強色),24位和32位(真彩色)等。色深16位以上的位圖還可以根據其中分別表示RGB三原色或CMYK四原色(有的還包括Alpha通道,CMYK四原色指打印顏色)的位數進一步分類 例如,顏色深度值為每像素?16?位的圖像無法顯示顏色深度為?48?位的圖像所具有顏色數。因此,48?位圖像與?16?位圖像相比,其陰影具有更高的平滑度。

由于位圖圖形跟分辨率有關,因此不能很好地進行縮放。當放大位圖圖像時,這一特性顯得尤為突出。通常,放大位圖有損其細節和品質。

2、三種圖形格式說明

Adobe Flash Player?支持GIF、JPG?和?PNG三種位圖圖像格式 。對于使用GIF和?PNG的位圖圖像還可以對每個像素添加一個額外的字節——Alpha通道,表示像素的透明度值。

GIF

圖形交換格式 (GIF) 最初由 CompuServe 于 1987 年開發,作為一種傳送 256 色(8 位顏色)圖像的方式。此格式提供較小的文件大小,是基于 Web 的圖像的理想格式。受此格式的調色板所限,GIF 圖像通常不適用于照片,照片通常需要高度的陰影和顏色漸變。GIF 圖像允許產生一位透明度,允許將顏色映射為清晰(或透明)。這可以使網頁的背景顏色通過已映射透明度的圖像顯示出來。

JPEG

由聯合圖像專家組 (JPEG) 開發,JPEG(通常寫成 JPG)圖像格式使用有損壓縮算法允許24 位顏色深度具有很小的文件大小。有損壓縮意味著每次保存圖像,都會損失圖像品質和數據,但會生成更小的文件大小。由于 JPEG 能夠顯示數百萬計的顏色,因此它是照片的理想格式。控制應用于圖像的壓縮程度的功能使您能夠控制圖像品質和文件大小。

PNG

可移植網絡圖形 (PNG) 格式是作為受專利保護的 GIF 文件格式的開放源替代格式而開發的。PNG 最多支持 64 位顏色深度,允許使用最多 1600 萬種顏色。由于 PNG 是一種比較新的格式,因此一些舊版本瀏覽器不支持 PNG 文件。與 JPG 不同, PNG 使用無損壓縮,這意味著保存圖像時不會丟失圖像數據。PNG 文件還支持 Alpha 透明度,允許使用最多 256 級透明度。

?

五、參考鏈接

1、http://hi.baidu.com/voidwizard/blog/item/0d8f23c295c79b5eb219a8da.html

2、[轉載]Flash火焰效果講解-BitmapData應用

地址:http://www.klstudio.com/post/194.html

3、BitmapData的整理http://uh.9ria.com/space-29516-do-blog-id-6898.html

轉載于:https://www.cnblogs.com/regalys168/p/3715419.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/258638.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/258638.shtml
英文地址,請注明出處:http://en.pswp.cn/news/258638.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android學習之高德地圖的通用功能開發步驟(二)

周一又來了&#xff0c;我就接著上次的開發步驟&#xff08;一&#xff09;來吧&#xff0c;繼續把高德地圖的相關簡單功能分享一下 上次寫到了第六步&#xff0c;接著寫第七步吧。 第七步&#xff1a;定位 地圖選點 路徑規劃 實時導航 以下是我的這個功能NaviMapActivity的…

Oracle中分區表中表空間屬性

Oracle中的分區表是Oracle中的一個很好的特性&#xff0c;可以把大表劃分成多個小表&#xff0c;從而提高對于該大表的SQL執行效率&#xff0c;而各個分區對應用又是透明的。分區表中的每個分區有獨立的存儲特性&#xff0c;包括表空間、PCT_FREE等。那分區表中的各分區表空間之…

期刊論文格式模板 電子版_期刊論文的框架結構

最近看到很火的一句話&#xff0c;若不是生活所迫&#xff0c;誰愿意把自己弄得一身才華。是否像極了正想埋頭苦寫卻毫無頭緒的你&#xff1f;發表期刊論文的用途 &#xff1a;1: 學校或者單位評獎&#xff0c;評優&#xff0c;推免等2&#xff1a;申領學位證(如畢業硬性要求&a…

faster rcnn學習之rpn 的生成

接著上一節《 faster rcnn學習之rpn訓練全過程》&#xff0c;假定我們已經訓好了rpn網絡&#xff0c;下面我們看看如何利用訓練好的rpn網絡生成proposal. 其網絡為rpn_test.pt # Enter your network definition here. # Use ShiftEnter to update the visualization. name: &q…

初學java之常用組件

1 2 import javax.swing.*;3 4 import java.awt.*;5 class Win extends JFrame6 {7 JTextField mytext; // 設置一個文本區8 JButton mybutton;9 JCheckBox mycheckBox[]; 10 JRadioButton myradio[]; 11 ButtonGroup group; //為一…

anaconda 安裝在c盤_最省心的Python版本和第三方庫管理——初探Anaconda

打算把公眾號和知乎專欄的文章搬運一點過來。 歷史文章可以去關注我的公眾號&#xff1a;不二小段&#xff0c;或者知乎&#xff1a;段小草。也歡迎來看我的視頻學Python↓↓↓跟不二學Python這篇文章可以作為Python入門的第一站可以結合這期視頻來看&#xff0c;基本上是這期視…

Iris recognition papers in the top journals in 2017

轉載自&#xff1a;https://kiennguyenstuff.wordpress.com/2017/10/05/iris-recognition-papers-in-the-top-journals-in-2017/ Top journals: – IEEE Transaction on Pattern Analysis and Machine Intelligence (PAMI) – Pattern Recognition (PR) – IEEE Transaction on…

判斷瀏覽器是否為IE內核的最簡單的方法

沒啥說的&#xff0c;直接貼代碼&#xff0c;算是ie hack了。 if (![1,]) {alert(is ie); } 轉載于:https://www.cnblogs.com/jasondan/p/3716660.html

dubbo控制中心部署,權重配置,以及管控臺中各個配置的簡單查看

dubbo給我們提供了現成的后臺管理網站&#xff0c;專門管理這些服務&#xff0c;應用&#xff0c;路由規則&#xff0c;動態配置&#xff0c;訪問控制、權重控制、負載均衡等等&#xff0c;還可以查看系統日志&#xff0c;系統狀態&#xff0c;系統環境等等&#xff0c;功能很是…

給git配置http代理

1. 安裝socat apt-get install socat 2. 創建配置文件&#xff0c;取名gitproxy填入以下內容&#xff1a; #!/bin/sh_proxy135.245.48.33_proxyport8000 exec socat STDIO PROXY:$_proxy:$1:$2,proxyport$_proxyport 加上可執行權限chmod x gitproxy&#xff0c;將此文件放在環…

faster rcnn在自己的數據集上訓練

本文是一個總結&#xff0c;參考了網上的眾多資料&#xff0c;匯集而成&#xff0c;以供自己后續參考。 一般說來&#xff0c;訓練自己的數據&#xff0c;有兩種方法&#xff1a;第一種就是將自己的數據集完全改造成VOC2007的形式&#xff0c;然后放到py-faster-rcnn/data 目錄…

1001種玩法 | 1001種玩法--數據存儲(2)

新智云www.enncloud.cn第二趴 Flockdb&#xff1a;一個高容錯的分布式圖形數據庫 FlockDB是一個存儲圖數據的分布式數據庫&#xff0c;圖數據庫的存儲對象是數學概念圖論里面的圖&#xff0c;而非圖片。Twitter使用它來存儲人與人之間的關系圖&#xff0c;這些關系包括&#xf…

python邏輯量有什么_Python中的邏輯運算符有什么?

邏輯運算符用于組合多個條件測試語句。假設“我今年18歲”和“我身高2米”這兩個語句&#xff0c;前一個語句是真的&#xff0c;后一個語句是假的&#xff0c;因此&#xff0c;“我今年18歲&#xff0c;并且我身高2米”這個語句是假的。其中&#xff0c;“并且”可以認為是邏輯…

時區日期處理及定時 (NSDate,NSCalendar,NSTimer,NSTimeZone)

NSDate存儲的是世界標準時(UTC)&#xff0c;輸出時需要根據時區轉換為本地時間 Dates NSDate類提供了創建date&#xff0c;比較date以及計算兩個date之間間隔的功能。Date對象是不可改變的。 如果你要創建date對象并表示當前日期&#xff0c;你可以alloc一個NSDate對象并調用in…

Android ListView分頁,動態添加數據

1.ListView分頁的實現&#xff0c;重點在于實現OnScrollListener接口&#xff0c;判斷滑動到最后一項時&#xff0c;是否還有數據可以加載&#xff0c; 我們可以利用listView.addFootView(View v)方法進行提示 自定義一個ListView&#xff08;這里本來想進行一些自定已修改的。…

faster rcnn的測試

當訓練結束后&#xff0c;faster rcnn的模型保存在在py-faster-rcnn/output目錄下&#xff0c;這時就可以用已有的模型對新的數據進行測試。 下面簡要說一下測試流程。 測試的主要代碼是./tools/test_net.py&#xff0c;并且使用到了fast_rcnn中test.py。 主要流程就是&…

python重點知識 鉆石_python——子類對象如何訪問父類的同名方法

1. 為什么只說方法不說屬性關于“子類對象如何訪問父類的同名屬性“是沒有意義的。因為父類的屬性子類都有&#xff0c;子類還有父類沒有的屬性&#xff0c;在初始化時&#xff0c;給子類對象具體化所有的給定屬性&#xff0c;完全沒必要訪問父類的屬性&#xff0c;因為是一樣的…

Android-Universal-Image-Loader 的使用說明

這個圖片異步載入并緩存的類已經被非常多開發人員所使用&#xff0c;是最經常使用的幾個開源庫之中的一個&#xff0c;主流的應用&#xff0c;隨便反編譯幾個火的項目&#xff0c;都能夠見到它的身影。但是有的人并不知道怎樣去使用這庫怎樣進行配置&#xff0c;網上查到的信息…

faster rcnn end2end 訓練與測試

除了前面講過的rpn與fast rcnn交替訓練外&#xff0c;faster rcnn還提供了一種近乎聯合的訓練&#xff0c;姑且稱為end2end訓練。 根據論文所講&#xff0c;end2end的訓練一氣呵成&#xff0c;對于前向傳播&#xff0c;rpn可以作為預設的網絡提供proposal.而在后向傳播中&…

jquery ui動態切換主題的一種實現方式

這兩天看coreservlets上的jQuery教程&#xff0c;雖然比較老了&#xff0c;不過講得還是不錯。最后一部分講jQuery ui 主題切換&#xff0c;用他介紹的方法實現不了。于是自己修改了下&#xff0c;可以了。代碼如下&#xff1a;html部分&#xff1a;<fieldset class"ui…