套件 | flash.display |
類別 | public class BitmapData |
繼承 | BitmapData Object |
實作 | IBitmapDrawable |
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
flash.display.Loader
類別載入的點陣圖影像的 BitmapData。
此類別可讓您將點陣圖顯示和 Flash Player 的內部顯示更新程序分開。 藉由直接操作 BitmapData 物件,您可以建立複雜的影像,但是不會因為需要頻繁地重新繪製向量資料內容而產生對每個影格的工作負荷。
BitmapData 類別方法支援一些特效,而這些特效無法透過非點陣圖顯示物件可用的濾鏡來使用。
BitmapData 物件包含像素資料陣列。 此資料可代表完全不透明的點陣圖或是包含 Alpha 色版資料的透明點陣圖。 任一類型的 BitmapData 物件都是儲存成 32 位元整數的緩衝區。 每個 32 位元整數都會決定點陣圖中單一像素的屬性。
每個 32 位元整數都是由四個 8 位元色版值 (從 0 到 255) 組合而成,分別描述像素的 Alpha 透明度、紅色、綠色以及藍色 (ARGB) 值。(關於 ARGB 值,最高位元組代表 Alpha 色版值,並緊接著紅色、綠色與藍色)。
當您將這四個色版 (Alpha、紅色、綠色和藍色) 與 BitmapData.copyChannel()
方法或 DisplacementMapFilter.componentX
和 DisplacementMapFilter.componentY
屬性搭配使用時,這四個色版會以數字來表示,而這些數字會在 BitmapDataChannel 類別中以下列常數表示:
-
BitmapDataChannel.ALPHA
-
BitmapDataChannel.RED
-
BitmapDataChannel.GREEN
-
BitmapDataChannel.BLUE
您可以使用 Bitmap 物件的 bitmapData
屬性,將 BitmapData 物件附加至 Bitmap 物件。
您可以利用 Graphics.beginBitmapFill()
方法,使用 BitmapData 物件來填滿 Graphics 物件。
在 AIR 執行階段中,DockIcon、Icon、InteractiveIcon 和 SystemTrayIcon 類別都包含 bitmaps
屬性,此屬性為 BitmapData 物件的陣列,這些物件可定義圖示的點陣圖影像。
在 AIR 1.5 和 Flash Player 10 中,BitmapData 物件的大小上限為 8,191 像素寬度或高度,且像素總計不得超過 16,777,215 像素 (因此,如果 BitmapData 物件的寬度為 8,191 像素,則其高度上限為 2,048 像素)。若為 Flash Player 9 和 AIR 1.1 及其更早版本,高度和寬度的上限都是 2,880 像素。
從 AIR 3 和 Flash Player 11 開始,已經移除 BitmapData 物件的大小限制。點陣圖的大小上限現在取決於作業系統。
如果 BitmapData 物件無效的話 (例如,如果 BitmapData 物件擁有 height == 0
與 width == 0
),或其已經透過 dispose() 加以處理,呼叫 BitmapData 物件的任何方法或屬性都會擲出 ArgumentError 錯誤。
相關 API 元素
flash.desktop.DockIcon.bitmaps
flash.display.Graphics.beginBitmapFill()
flash.desktop.Icon.bitmaps
flash.desktop.InteractiveIcon.bitmaps
flash.display.Loader
flash.desktop.SystemTrayIcon.bitmaps
屬性 | 定義自 | ||
---|---|---|---|
constructor : Object
類別物件的參照或是特定物件實體的建構函數。 | Object | ||
height : int [唯讀]
點陣圖影像的高度,以像素為單位。 | BitmapData | ||
rect : Rectangle [唯讀]
定義點陣圖影像大小和位置的矩形。 | BitmapData | ||
transparent : Boolean [唯讀]
定義點陣圖影像是否支援每個像素透明度。 | BitmapData | ||
width : int [唯讀]
點陣圖影像的寬度,以像素為單位。 | BitmapData |
方法 | 定義自 | ||
---|---|---|---|
以指定的寬度和高度來建立 BitmapData 物件。 | BitmapData | ||
applyFilter(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, filter:BitmapFilter):void
採用來源影像和濾鏡物件並產生已套用濾鏡的影像。 | BitmapData | ||
傳回具有和內含點陣圖完全相同副本、且為原始實體副本的新 BitmapData 物件。 | BitmapData | ||
使用 ColorTransform 物件調整點陣圖影像指定區域中的顏色值。 | BitmapData | ||
比較兩個 BitmapData 物件。 | BitmapData | ||
copyChannel(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, sourceChannel:uint, destChannel:uint):void
從另一個 BitmapData 物件或目前 BitmapData 物件的一個色版,將資料傳送到目前 BitmapData 物件的色版。 | BitmapData | ||
copyPixels(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, alphaBitmapData:BitmapData = null, alphaPoint:Point = null, mergeAlpha:Boolean = false):void
在影像之間提供執行不含延伸、旋轉或顏色特效的像素處理快速程序。 | BitmapData | ||
從像素資料的矩形區域中將位元組陣列填色。 | BitmapData | ||
釋放用來儲存 BitmapData 物件的記憶體。 | BitmapData | ||
draw(source:IBitmapDrawable, matrix:Matrix = null, colorTransform:flash.geom:ColorTransform = null, blendMode:String = null, clipRect:Rectangle = null, smoothing:Boolean = false):void
使用 Flash 執行階段的向量描繪器,在點陣圖影像上繪製 source 顯示物件。 | BitmapData | ||
drawWithQuality(source:IBitmapDrawable, matrix:Matrix = null, colorTransform:flash.geom:ColorTransform = null, blendMode:String = null, clipRect:Rectangle = null, smoothing:Boolean = false, quality:String = null):void
使用 Flash 執行階段的向量描繪器,在點陣圖影像上繪製 source 顯示物件。 | BitmapData | ||
使用選取的壓縮程式演算法壓縮這個 BitmapData 物件,並傳回新的 ByteArray 物件。 | BitmapData | ||
以指定的 ARGB 顏色對像素的矩形區域填色。 | BitmapData | ||
對於從 (x, y) 座標開始的影像,執行填色作業,並填入特定顏色。 | BitmapData | ||
指定 BitmapData 物件、來源矩形以及濾鏡物件,來決定 applyFilter() 方法呼叫所影響的目標矩形。 | BitmapData | ||
決定矩形區域,將位於點陣圖影像內所有指定顏色的像素全部封閉起來 (如果 findColor 參數設為 true),或者將不包含指定顏色的所有像素封閉起來 (如果 findColor 參數設為 false)。 | BitmapData | ||
傳回整數,代表 BitmapData 物件中特定點 (x, y) 的 RGB 像素值。 | BitmapData | ||
傳回 ARGB 顏色數值,其中包含 Alpha 色版資料和 RGB 資料。 | BitmapData | ||
從像素資料的矩形區域產生位元組陣列。 | BitmapData | ||
從矩形區域的像素資料產生向量陣列。 | BitmapData | ||
指出物件是否有已定義的指定屬性。 | Object | ||
計算 BitmapData 物件的 256 色二進位長條圖。 | BitmapData | ||
hitTest(firstPoint:Point, firstAlphaThreshold:uint, secondObject:Object, secondBitmapDataPoint:Point = null, secondAlphaThreshold:uint = 1):Boolean
在一個點陣圖影像和一個點、矩形或其它點陣圖影像之間,執行像素層級作用區域偵測。 | BitmapData | ||
指出 Object 類別的實體是否位於指定為參數的物件原型鏈中。 | Object | ||
鎖定影像,以便當這個 BitmapData 物件變更時,其它參照此 BitmapData 物件 (例如 Bitmap 物件) 的任何物件不會跟著更新。 | BitmapData | ||
merge(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, redMultiplier:uint, greenMultiplier:uint, blueMultiplier:uint, alphaMultiplier:uint):void
執行從來源影像到目標影像的每個色版的混合。 | BitmapData | ||
noise(randomSeed:int, low:uint = 0, high:uint = 255, channelOptions:uint = 7, grayScale:Boolean = false):void
以呈現隨機雜點的像素來填色影像。 | BitmapData | ||
paletteMap(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, redArray:Array = null, greenArray:Array = null, blueArray:Array = null, alphaArray:Array = null):void
重新對應影像 (最多具有四個顏色面板資料陣列) 中的顏色色版值,每個顏色色版值對應一個色版。 | BitmapData | ||
perlinNoise(baseX:Number, baseY:Number, numOctaves:uint, randomSeed:int, stitch:Boolean, fractalNoise:Boolean, channelOptions:uint = 7, grayScale:Boolean = false, offsets:Array = null):void
產生 Perlin 雜點影像。 | BitmapData | ||
pixelDissolve(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, randomSeed:int = 0, numPixels:int = 0, fillColor:uint = 0):int
執行從來源影像至目標影像,或使用相同影像的像素溶解效果。 | BitmapData | ||
指出指定的屬性是否存在,以及是否可列舉。 | Object | ||
以一定的 (x, y) 像素量來捲動影像。 | BitmapData | ||
設定 BitmapData 物件的單一像素。 | BitmapData | ||
設定 BitmapData 物件單一像素的顏色和 Alpha 透明度值。 | BitmapData | ||
將位元組陣列轉換為像素資料的矩形區域。 | BitmapData | ||
為迴圈作業設定動態屬性的可用性。 | Object | ||
將向量轉換為像素資料的矩形區域。 | BitmapData | ||
threshold(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, operation:String, threshold:uint, color:uint = 0, mask:uint = 0xFFFFFFFF, copySource:Boolean = false):uint
根據指定的臨界值來測試影像的像素值,並設定將測試傳遞至新顏色值的像素。 | BitmapData | ||
傳回代表此物件的字串,根據地區特定慣例進行格式化。 | Object | ||
會傳回指定之物件的字串形式。 | Object | ||
解除鎖定影像,以便當這個 BitmapData 物件變更時,其它參照此 BitmapData 物件 (例如 Bitmap 物件) 的任何物件不會跟著更新。 | BitmapData | ||
會傳回指定之物件的基本值。 | Object |
height | 屬性 |
rect | 屬性 |
transparent | 屬性 |
width | 屬性 |
BitmapData | () | 建構函式 |
public function BitmapData(width:int, height:int, transparent:Boolean = true, fillColor:uint = 0xFFFFFFFF)
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
以指定的寬度和高度來建立 BitmapData 物件。 如果指定 fillColor
參數的值,點陣圖中的每個像素都會設定為此顏色。
根據預設,建立的點陣圖為透明,除非您傳遞 false
值供 transparent
參數使用。 當您建立不透明的點陣圖時,就無法再變更為透明的點陣圖。 不透明點陣圖中的每個像素,僅使用 24 位元的顏色色版資訊。 如果將點陣圖定義為透明,每個像素會使用 32 位元的顏色色版資訊,包含 Alpha 透明度色版。
在 AIR 1.5 和 Flash Player 10 中,BitmapData 物件的大小上限為 8,191 像素寬度或高度,且像素總計不得超過 16,777,215 像素 (因此,如果 BitmapData 物件的寬度為 8,191 像素,則其高度上限為 2,048 像素)。若為 Flash Player 9 和 AIR 1.1 及其更早版本,高度和寬度的上限都是 2,880 像素。如果指定的寬度或高度值大於 2880,就不會建立新實體。
參數width:int — 點陣圖影像的寬度,以像素為單位。
| |
height:int — 點陣圖影像的高度,以像素為單位。
| |
transparent:Boolean (default = true ) — 指定點陣圖影像是否支援每個像素透明度。 預設值為 true (透明)。 若要建立完全透明點陣圖,將 transparent 參數值設為 true ,並將 fillColor 參數值設為 0x00000000 (或 0)。 將 transparent 屬性設為 false 可以稍微改善顯示效能。
| |
fillColor:uint (default = 0xFFFFFFFF ) — 您可以使用 32 位元 ARGB 顏色值對點陣圖影像區域進行填色。 預設值為 0xFFFFFFFF (純白)。
|
擲回值
ArgumentError — 寬度和/或高度超出最大尺寸。
|
applyFilter | () | 方法 |
public function applyFilter(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, filter:BitmapFilter):void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 9, AIR 1.0 |
採用來源影像和濾鏡物件並產生已套用濾鏡的影像。
此方法會依賴內建濾鏡物件的行為,該物件會決定受到輸入來源矩形影響的目標矩形。
套用濾鏡之後,結果影像會比輸入影像大。 例如,如果使用 BlurFilter 類別來模糊化 (50,50,100,100) 的來源矩形以及 (10,10) 的目標點,目標影像中變更的區域將會因為模糊化而比 (10,10,60,60) 大。 這通常會在呼叫 applyFilter()
時,在內部發生。
如果 sourceBitmapData
參數的 sourceRect
參數是一個內部區域,如在一個 200 x 200 影像的 (50,50,100,100) 中,濾鏡會使用 sourceRect
參數外部的來源像素來產生目標矩形。
如果 BitmapData 物件與指定為 sourceBitmapData
參數的物件是同一個物件,則應用程式會使用物件的暫存副本來執行濾鏡操作。為了達到最佳效能,請避免這種情況發生。
參數
sourceBitmapData:BitmapData — 要使用的輸入點陣圖影像。 來源影像可以是不一樣的 BitmapData 物件,或者參照到目前的 BitmapData 實體。
| |
sourceRect:Rectangle — 定義要用來做為輸入的來源影像區域之矩形。
| |
destPoint:Point — 目標影像 (目前 BitmapData 實體) 內對應至來源矩形左上角的點。
| |
filter:BitmapFilter — 用來執行濾鏡操作的濾鏡物件。 每種類型的濾鏡都有特定的需求,如下列所示:
|
擲回值
TypeError — sourceBitmapData、sourceRect、destPoint 或濾鏡都是 null。
| |
IllegalOperationError — BitmapData 物件的透明度與濾鏡操作不相容。
|
相關 API 元素
flash.filters.BlurFilter
flash.filters.ColorMatrixFilter
flash.filters.ConvolutionFilter
flash.filters.DisplacementMapFilter
flash.filters.DropShadowFilter
flash.filters.GlowFilter
flash.display.DisplayObject.filters
範例 ( 如何使用本範例 )
import flash.display.Bitmap; import flash.display.BitmapData; import flash.geom.Point; import flash.geom.Rectangle; import flash.filters.BlurFilter; var bmd:BitmapData = new BitmapData(80, 30, false, 0xFFCC00); var rect:Rectangle = new Rectangle(10, 10, 40, 10); bmd.fillRect(rect, 0xFF0000); var pt:Point = new Point(10, 10); var filter:BlurFilter = new BlurFilter(); bmd.applyFilter(bmd, rect, pt, filter); var bm:Bitmap = new Bitmap(bmd); addChild(bm);
clone | () | 方法 |
public function clone():BitmapData
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
傳回具有和內含點陣圖完全相同副本、且為原始實體副本的新 BitmapData 物件。
傳回值BitmapData — 具有和原始物件完全相同的新 BitmapData 物件。
|
範例 ( 如何使用本範例 )
import flash.display.Bitmap; import flash.display.BitmapData; var bmd1:BitmapData = new BitmapData(100, 80, false, 0x00000000); var bmd2:BitmapData = bmd1.clone(); bmd1.setPixel32(1, 1, 0xFFFFFFFF); trace(bmd1.getPixel32(1, 1).toString(16)); // ffffffff trace(bmd2.getPixel32(1, 1).toString(16)); // ff000000 var bm1:Bitmap = new Bitmap(bmd1); this.addChild(bm1); var bm2:Bitmap = new Bitmap(bmd2); bm2.x = 110; this.addChild(bm2);
colorTransform | () | 方法 |
public function colorTransform(rect:Rectangle, colorTransform:flash.geom:ColorTransform):void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
使用 ColorTransform
物件調整點陣圖影像指定區域中的顏色值。 如果矩形符合點陣圖影像的邊界,則此方法將會變化整個影像的顏色值。
參數
rect:Rectangle — 定義 ColorTransform 物件套用之影像區域的 Rectangle 物件。
| |
colorTransform:flash.geom:ColorTransform — 用來說明要套用之顏色轉換值的 ColorTransform 物件。
|
擲回值
TypeError — rect 或 colorTransform 都是 null。
|
相關 API 元素
範例 ( 如何使用本範例 )
import flash.display.Bitmap; import flash.display.BitmapData; import flash.geom.Rectangle; import flash.geom.ColorTransform; var bmd:BitmapData = new BitmapData(80, 30, false, 0xFF0000); var cTransform:ColorTransform = new ColorTransform(); cTransform.alphaMultiplier = 0.5 var rect:Rectangle = new Rectangle(0, 0, 40, 30); bmd.colorTransform(rect, cTransform); var bm:Bitmap = new Bitmap(bmd); addChild(bm);
compare | () | 方法 |
public function compare(otherBitmapData:BitmapData):Object
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
比較兩個 BitmapData 物件。 如果兩個 BitmapData 物件都具有相同的尺寸 (寬度與高度),則方法會傳回新的 BitmapData 物件,而且在兩個來源物件中的所有像素裡,每個像素就是其它像素的「色差」:
- 如果兩個像素相等,則像素色差為 0x00000000。
- 如果兩個像素具有不同的 RGB 值 (忽略 Alpha 值),則像素色差為 0xRRGGBB,其中 RR/GG/BB 是紅色、綠色和藍色色版之間的個別色差 (來源物件中的像素值減去
otherBitmapData
物件中的像素值)。 在這裡 Alpha 色版的色差會被忽略。 - 如果只有 Alpha 色版值不同, 像素值為 0xZZFFFFFF,當中的 ZZ 為 Alpha 值中的差異 (來源物件的 Alpha 值減去
otherBitmapData
物件中的 Alpha 值)。
例如,假設有下列兩個 BitmapData 物件:
var bmd1:BitmapData = new BitmapData(50, 50, true, 0xFFFF8800); var bmd2:BitmapData = new BitmapData(50, 50, true, 0xCCCC6600); var diffBmpData:BitmapData = bmd1.compare(bmd2) as BitmapData; trace ("0x" + diffBmpData.getPixel(0,0).toString(16); // 0x332200
注意: 用來填滿兩個 BitmapData 物件的所有顏色在 RGB 值上都有些許的色差 (0xFF0000 與 0xFFAA00)。 compare()
方法的結果會產生新的 BitmapData 物件,其中每個像素在兩個點陣圖之中會有 RGB 值的色差。
假設下列兩個 BitmapData 物件當中,RGB 顏色都一樣,但是 Alpha 值不同:
var bmd1:BitmapData = new BitmapData(50, 50, true, 0xFFFFAA00); var bmd2:BitmapData = new BitmapData(50, 50, true, 0xCCFFAA00); var diffBmpData:BitmapData = bmd1.compare(bmd2) as BitmapData; trace ("0x" + diffBmpData.getPixel32(0,0).toString(16); // 0x33ffffff
compare()
方法的結果會產生新的 BitmapData 物件,其中每個像素在兩個點陣圖之中會有 Alpha 值的色差。
如果這些 BitmapData 物件都相等 (具有相同的寬度、高度以及相同的像素值),則方法會傳回數字 0。
如果 BitmapData 物件的寬度不相等,方法會傳回數字 -3。
如果這些 BitmapData 物件的高度不相等,但是寬度相等,則方法會傳回數字 -4。
下列範例將使用不同的寬度 (50 與 60) 來比較兩個 Bitmap 物件:
var bmd1:BitmapData = new BitmapData(100, 50, false, 0xFFFF0000); var bmd2:BitmapData = new BitmapData(100, 60, false, 0xFFFFAA00); trace(bmd1.compare(bmd2)); // -4
參數
otherBitmapData:BitmapData — 與來源 BitmapData 物件比較的 BitmapData 物件。
|
Object — 如果兩個 BitmapData 物件都具有相同的尺寸 (寬度與高度),則方法會傳回新的 BitmapData 物件,而且在兩個物件中都會存在色差 (請參閱主要討論內容)。 如果這兩個 BitmapData 物件相等,則此方法會傳回數字 0。 如果這兩個 BitmapData 物件的寬度不相等,則此方法會傳回數字 -3。 如果這兩個 BitmapData 物件的高度不相等,則此方法會傳回數字 -4。
|
擲回值
TypeError — otherBitmapData 是 null。
|
範例 ( 如何使用本範例 )
import flash.display.Bitmap; import flash.display.BitmapData; var bmd1:BitmapData = new BitmapData(50, 50, true, 0xFFFFAA00); var bmd2:BitmapData = new BitmapData(50, 50, true, 0xCCFFAA00); var diffBmpData:BitmapData = BitmapData(bmd1.compare(bmd2)); var diffValue:String = diffBmpData.getPixel32(1, 1).toString(16); trace (diffValue); // 33ffffff var bm1:Bitmap = new Bitmap(bmd1); addChild(bm1); var bm2:Bitmap = new Bitmap(bmd2); addChild(bm2); bm2.x = 60;
copyChannel | () | 方法 |
public function copyChannel(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, sourceChannel:uint, destChannel:uint):void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
從另一個 BitmapData 物件或目前 BitmapData 物件的一個色版,將資料傳送到目前 BitmapData 物件的色版。 在目標 BitmapData 物件裡其它色版中的所有資料都會保留下來。
來源色版值和目標色版值可能為下列值的其中之一:
BitmapDataChannel.RED
BitmapDataChannel.GREEN
BitmapDataChannel.BLUE
BitmapDataChannel.ALPHA
參數
sourceBitmapData:BitmapData — 要使用的輸入點陣圖影像。 來源影像可以是不一樣的 BitmapData 物件,或者參照到目前的 BitmapData 物件。
| |
sourceRect:Rectangle — 來源 Rectangle 物件。 如果您只想要複製點陣圖中較小區域的色版資料,請指定小於 BitmapData 物件整體大小的來源矩形。
| |
destPoint:Point — 目標 Point 物件,代表將放置新色版資料的矩形區域之左上角。 如果您只想要將色版資料從某個區域複製到目標影像的不同區域上,請指定 (0,0) 以外的點。
| |
sourceChannel:uint — 來源色版。 使用來自 BitmapDataChannel 類別 (BitmapDataChannel.RED 、BitmapDataChannel.BLUE 、BitmapDataChannel.GREEN 、BitmapDataChannel.ALPHA ) 的值。
| |
destChannel:uint — 目標色版。 使用來自 BitmapDataChannel 類別 (BitmapDataChannel.RED 、BitmapDataChannel.BLUE 、BitmapDataChannel.GREEN 、BitmapDataChannel.ALPHA ) 的值。
|
擲回值
TypeError — sourceBitmapData、sourceRect 或 destPoint 都是 null。
|
相關 API 元素
範例 ( 如何使用本範例 )
import flash.display.Bitmap; import flash.display.BitmapData; import flash.geom.Rectangle; import flash.geom.Point; var bmd:BitmapData = new BitmapData(100, 80, false, 0x00FF0000); var rect:Rectangle = new Rectangle(0, 0, 20, 20); var pt:Point = new Point(10, 10); bmd.copyChannel(bmd, rect, pt, BitmapDataChannel.RED, BitmapDataChannel.BLUE); var bm:Bitmap = new Bitmap(bmd); this.addChild(bm);
copyPixels | () | 方法 |
public function copyPixels(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, alphaBitmapData:BitmapData = null, alphaPoint:Point = null, mergeAlpha:Boolean = false):void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
在影像之間提供執行不含延伸、旋轉或顏色特效的像素處理快速程序。 這個方法會將來源影像的矩形區域,複製到目標 BitmapData 物件之目標點上相同大小的矩形區域中。
如果包含 alphaBitmap
和 alphaPoint
參數,則可以使用次要的影像當作來源影像的 Alpha 來源。 如果來源影像具有 Alpha 資料,則兩組 Alpha 資料都會用來將來源影像的像素合成至目標影像上。 alphaPoint
參數是 Alpha 影像對應至來源矩形左上角的點。 任何位於來源影像和 Alpha 影像交會點外的像素都不會複製到目標影像上。
mergeAlpha
屬性會控制當透明影像複製到另一個透明影像時,是否要使用 Alpha 色版。 若要複製包含 Alpha 色版資料的像素,請將 mergeAlpha
屬性設定為 true
。 根據預設,mergeAlpha
屬性為 false
。
參數
sourceBitmapData:BitmapData — 要複製像素的輸入點陣圖影像。 來源影像可以是不一樣的 BitmapData 實體,或者參照到目前的 BitmapData 實體。
| |
sourceRect:Rectangle — 定義要用來做為輸入的來源影像區域之矩形。
| |
destPoint:Point — 目標點,代表要放置新像素的矩形區域之左上角。
| |
alphaBitmapData:BitmapData (default = null ) — 次要的 Alpha BitmapData 物件來源。
| |
alphaPoint:Point (default = null ) — 在 Alpha BitmapData 物件來源中對應至 sourceRect 參數左上角的點。
| |
mergeAlpha:Boolean (default = false ) — 若要使用 Alpha 色版,請將值設為 true 。 若要複製像素 (不使用 Alpha 色版),請將值設定為 false 。
|
擲回值
TypeError — sourceBitmapData、sourceRect 與 destPoint 都是 null。
|
範例 ( 如何使用本範例 )
import flash.display.Bitmap; import flash.display.BitmapData; import flash.geom.Rectangle; import flash.geom.Point; var bmd1:BitmapData = new BitmapData(40, 40, false, 0x000000FF); var bmd2:BitmapData = new BitmapData(80, 40, false, 0x0000CC44); var rect:Rectangle = new Rectangle(0, 0, 20, 20); var pt:Point = new Point(10, 10); bmd2.copyPixels(bmd1, rect, pt); var bm1:Bitmap = new Bitmap(bmd1); this.addChild(bm1); var bm2:Bitmap = new Bitmap(bmd2); this.addChild(bm2); bm2.x = 50;
copyPixelsToByteArray | () | 方法 |
public function copyPixelsToByteArray(rect:Rectangle, data:ByteArray):void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 11.4, AIR 3.4 |
從像素資料的矩形區域中將位元組陣列填色。這個方法會從 ByteArray 的 position
索引開始,將每個像素的無正負號整數 (32 位元未相乘的像素值) 寫入位元組陣列中。必要時,位元組陣列的大小會增加到所需的位元組數目,以容納所有像素資料。
參數
rect:Rectangle — 位於目前 BitmapData 物件的矩形區域
| |
data:ByteArray — 目標 ByteArray 物件
|
擲回值
TypeError — 因為 rect 引數為 null ,或者 data 引數為 null
|
相關 API 元素
dispose | () | 方法 |
public function dispose():void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
釋放用來儲存 BitmapData 物件的記憶體。
某個影像呼叫 dispose()
方法時,會將此影像的高度和寬度都設定為 0。 所有針對此 BitmapData 實體之方法或屬性的後續呼叫都會失敗,並擲回例外。
BitmapData.dispose()
立即釋放實際點陣圖資料佔用的記憶體 (一個點陣圖會消耗 64 MB 的記憶體)。使用 BitmapData.dispose()
之後,BitmapData 物件再也無法使用,如果您在 BitmapData 物件上呼叫函數,則 Flash 執行階段會擲出例外。不過,BitmapData.dispose()
並不會對 BitmapData 物件 (大約 128 個位元組) 進行垃圾回收;垃圾回收程式收集 BitmapData 物件時,會釋放實際 BitmapData 物件佔用的記憶體。
相關 API 元素
範例 ( 如何使用本範例 )
dispose()
方法之後,再呼叫 BitmapData 物件之方法所產生的效果 (會擲回例外):
import flash.display.BitmapData; var myBitmapData:BitmapData = new BitmapData(100, 80, false, 0x000000FF); trace(myBitmapData.getPixel(1, 1)); // 255 == 0xFF myBitmapData.dispose(); try { trace(myBitmapData.getPixel(1, 1)); } catch (error:Error) { trace(error); // ArgumentError }
draw | () | 方法 |
public function draw(source:IBitmapDrawable, matrix:Matrix = null, colorTransform:flash.geom:ColorTransform = null, blendMode:String = null, clipRect:Rectangle = null, smoothing:Boolean = false):void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
使用 Flash 執行階期的向量描繪器,在點陣圖影像上繪製 source
顯示物件。您可以指定 matrix
、colorTransform
、blendMode
,以及目標 clipRect
參數來控制顯示的執行方式。 或者,您也可以指定是否在點陣圖縮放時平滑化處理 (只有當來源物件是 BitmapData 物件才能這麼處理)。
注意:drawWithQuality()
方法的運作方式與 draw()
方法完全相同,只是它不會使用 Stage.quality
屬性來決定向量顯示的品質,請將 quality
參數指定給 drawWithQuality()
方法。
這個方法會直接對應至編寫工具介面中使用物件標準向量描繪器來繪製物件的方式。
來源顯示物件並不會針對此呼叫使用所套用的任何變形。 會將它當做存在於元件庫或檔案中,而且不具有矩陣變形、顏色轉換和混合模式。 若要藉由使用顯示物件的轉換屬性來加以繪製 (例如繪製影片片段),可以將其 transform
屬性物件複製到使用 BitmapData 物件之 Bitmap 物件的 transform
屬性上。
Flash Player 9.0.115.0 和更新版本以及 Adobe AIR 透過 RTMP 支援此方法。您可以使用伺服器端指令碼控制 Flash Media Server 上串流的存取。如需詳細資訊,請參閱「Adobe Flash Media Server 伺服器端 ActionScript 語言參考」中的 Client.audioSampleAccess
和 Client.videoSampleAccess
屬性。
如果 source 物件及其所有子物件 (在 Sprite 或 MovieClip 物件的情況下) 不是來自與呼叫者相同的網域,也不是位於呼叫者可存取的內容中 (藉由呼叫 Security.allowDomain()
方法進行存取),呼叫 draw()
會擲回 SecurityError 例外。應用程式安全執行程序中的 AIR 內容不受此限制。
使用載入的點陣圖影像當做 source
還存有一些限制。如果載入的影像與呼叫端來自相同網域,呼叫 draw()
方法就會成功。再者,影像伺服器上的跨網域原則檔可能授與權限,允許 SWF 內容的網域呼叫 draw()
方法。在此情況下,您必須設定 LoaderContext 物件的 checkPolicyFile
屬性,並且使用該物件做為 context
參數來呼叫 Loader 物件的 load()
方法以載入影像。應用程式安全執行程序中的 AIR 內容不受這些限制。
在 Windows 中,draw()
方法無法捕捉內嵌於 Adobe AIR 之 HTMLLoader 物件的 HTML 網頁內之 SWF 內容。
draw()
方法既無法捕捉 Adobe AIR 中的 PDF 內容,也無法捕捉 Adobe AIR 中內嵌於 wmode
特質設為 "window"
之 HTML 的 SWF 內容。
參數
source:IBitmapDrawable — 要繪製到 BitmapData 物件的顯示物件或 BitmapData 物件。(DisplayObject 與 BitmapData 類別會實作 IBitmapDrawable 介面)。
| |
matrix:Matrix (default = null ) — 用來縮放、旋轉或轉移點陣圖之座標的 Matrix 物件。 如果您不想將矩陣變形套用到影像上,請使用預設的 new Matrix() 建構函式,或傳遞 null 值,將此參數設為單位矩陣。
| |
colorTransform:flash.geom:ColorTransform (default = null ) — 用來調整點陣圖顏色值的 ColorTransform 物件。 如果沒有提供物件,點陣圖影像的顏色就不會變化。 如果您必須傳遞此參數,但又不想轉換影像,請將此參數設為以預設 new ColorTransform() 建構函式建立的 ColorTransform 物件。
| |
blendMode:String (default = null ) — 來自 flash.display.BlendMode 類別的字串值,可指定要套用至結果點陣圖的混合模式。
| |
clipRect:Rectangle (default = null ) — 用來定義要繪製的來源物件區域之 Rectangle 物件。 如果您沒有提供此值,就不會產生剪裁效果,並且會繪製整個來源物件。
| |
smoothing:Boolean (default = false ) — Boolean 值,決定因 matrix 參數中指定的縮放或旋轉而縮放或旋轉 BitmapData 物件時是否要進行平滑化處理。只有當 source 參數是 BitmapData 物件的情況下,才能套用 smoothing 參數。將 smoothing 設定為 false 時,旋轉或縮放的 BitmapData 影像會呈現像素化或鋸齒狀。 例如,下列兩個影像都會使用相同的 BitmapData 物件做為 source 參數,但是左邊的影像是將 smoothing 參數設定為 true ;而右邊的影像則是設定為 false 。
在將 |
擲回值
ArgumentError — source 參數不是一個 BitmapData 或 DisplayObject 物件。
| |
SecurityError — source 物件及其所有子物件 (在 Sprite 或 MovieClip 物件的情況下) 不是來自與呼叫者相同的網域,也不是位於呼叫者可存取的內容中 (藉由呼叫 Security.allowDomain() 方法進行存取)。應用程式安全執行程序中的 AIR 內容不受此限制。
| |
ArgumentError — 來源若不是 null,就是無效的 IBitmapDrawable 物件。
|
相關 API 元素
flash.display.Stage.quality
flash.display.StageQuality
flash.display.BlendMode
flash.geom.ColorTransform
flash.geom.Matrix
flash.system.JPEGLoaderContext
範例 ( 如何使用本範例 )
import flash.display.Bitmap; import flash.display.BitmapData; import flash.text.TextField; var tf:TextField = new TextField(); tf.text = "bitmap text"; var myBitmapData:BitmapData = new BitmapData(80, 20); myBitmapData.draw(tf); var bmp:Bitmap = new Bitmap(myBitmapData); this.addChild(bmp);
drawWithQuality | () | 方法 |
public function drawWithQuality(source:IBitmapDrawable, matrix:Matrix = null, colorTransform:flash.geom:ColorTransform = null, blendMode:String = null, clipRect:Rectangle = null, smoothing:Boolean = false, quality:String = null):void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 11.3, AIR 3.3 |
使用 Flash 執行階期的向量描繪器,在點陣圖影像上繪製 source
顯示物件。您可以指定 matrix
、colorTransform
、blendMode
,以及目標 clipRect
參數來控制顯示的執行方式。 或者,您也可以指定是否在點陣圖縮放時平滑化處理 (只有當來源物件是 BitmapData 物件才能這麼處理)。
注意:drawWithQuality()
方法的運作方式與 draw()
方法完全相同,只是它不會使用 Stage.quality
屬性來決定向量顯示的品質,請將 quality
參數指定給 drawWithQuality()
方法。
這個方法會直接對應至編寫工具介面中使用物件標準向量描繪器來繪製物件的方式。
來源顯示物件並不會針對此呼叫使用所套用的任何變形。 會將它當做存在於元件庫或檔案中,而且不具有矩陣變形、顏色轉換和混合模式。 若要藉由使用顯示物件的轉換屬性來加以繪製 (例如繪製影片片段),可以將其 transform
屬性物件複製到使用 BitmapData 物件之 Bitmap 物件的 transform
屬性上。
Flash Player 9.0.115.0 和更新版本以及 Adobe AIR 透過 RTMP 支援此方法。您可以使用伺服器端指令碼控制 Flash Media Server 上串流的存取。如需詳細資訊,請參閱 Adobe Flash Media Server 伺服器端 ActionScript 語言參考中的 Client.audioSampleAccess
和 Client.videoSampleAccess
屬性。
如果 source 物件及其所有子物件 (在 Sprite 或 MovieClip 物件的情況下) 不是來自與呼叫者相同的網域,也不是位於呼叫者可存取的內容中 (藉由呼叫 Security.allowDomain()
方法進行存取),呼叫 drawWithQuality()
會擲回 SecurityError 例外。應用程式安全執行程序中的 AIR 內容不受此限制。
使用載入的點陣圖影像當做 source
還存有一些限制。如果載入的影像與呼叫者來自相同網域,呼叫 drawWithQuality()
方法就會成功。再者,影像伺服器上的跨網域原則檔可能授與權限,允許 SWF 內容的網域呼叫 drawWithQuality()
方法。在此情況下,您必須設定 LoaderContext 物件的 checkPolicyFile
屬性,並且使用該物件做為 context
參數來呼叫 Loader 物件的 load()
方法以載入影像。應用程式安全執行程序中的 AIR 內容不受這些限制。
在 Windows 中,drawWithQuality()
方法無法捕捉內嵌於 Adobe AIR HTMLLoader 物件中 HTML 網頁的 SWF 內容。
drawWithQuality()
方法既無法捕捉 Adobe AIR 中的 PDF 內容,也無法捕捉 Adobe AIR 中內嵌於 wmode
特質設為 "window"
之 HTML 的 SWF 內容。
參數
source:IBitmapDrawable — 要繪製到 BitmapData 物件的顯示物件或 BitmapData 物件。(DisplayObject 與 BitmapData 類別會實作 IBitmapDrawable 介面)。
| |
matrix:Matrix (default = null ) — 用來縮放、旋轉或轉移點陣圖之座標的 Matrix 物件。 如果您不想將矩陣變形套用到影像上,請使用預設的 new Matrix() 建構函式,或傳遞 null 值,將此參數設為單位矩陣。
| |
colorTransform:flash.geom:ColorTransform (default = null ) — 用來調整點陣圖顏色值的 ColorTransform 物件。 如果沒有提供物件,點陣圖影像的顏色就不會變化。 如果您必須傳遞此參數,但又不想轉換影像,請將此參數設為以預設 new ColorTransform() 建構函式建立的 ColorTransform 物件。
| |
blendMode:String (default = null ) — 來自 flash.display.BlendMode 類別的字串值,可指定要套用至結果點陣圖的混合模式。
| |
clipRect:Rectangle (default = null ) — 用來定義要繪製的來源物件區域之 Rectangle 物件。 如果您沒有提供此值,就不會產生剪裁效果,並且會繪製整個來源物件。
| |
smoothing:Boolean (default = false ) — Boolean 值,決定因 matrix 參數中指定的縮放或旋轉而縮放或旋轉 BitmapData 物件時是否要進行平滑化處理。只有當 source 參數是 BitmapData 物件的情況下,才能套用 smoothing 參數。將 smoothing 設定為 false 時,旋轉或縮放的 BitmapData 影像會呈現像素化或鋸齒狀。 例如,下列兩個影像都會使用相同的 BitmapData 物件做為 source 參數,但是左邊的影像是將 smoothing 參數設定為 true ;而右邊的影像則是設定為 false 。
在將 | |
quality:String (default = null ) — 任一 StageQuality 值。選取繪製向量圖形時要使用的消除鋸齒品質。
|
擲回值
ArgumentError — source 參數不是一個 BitmapData 或 DisplayObject 物件。
| |
SecurityError — source 物件及其所有子物件 (在 Sprite 或 MovieClip 物件的情況下) 不是來自與呼叫者相同的網域,也不是位於呼叫者可存取的內容中 (藉由呼叫 Security.allowDomain() 方法進行存取)。應用程式安全執行程序中的 AIR 內容不受此限制。
| |
ArgumentError — 來源若不是 null,就是無效的 IBitmapDrawable 物件。
|
相關 API 元素
flash.display.StageQuality
flash.display.BlendMode
flash.geom.ColorTransform
flash.geom.Matrix
flash.system.JPEGLoaderContext
範例 ( 如何使用本範例 )
import flash.display.Bitmap; import flash.display.BitmapData; import flash.text.TextField; var tf:TextField = new TextField(); tf.text = "bitmap text"; var myBitmapData:BitmapData = new BitmapData(80, 20); myBitmapData.drawWithQuality(tf, , , , , , StageQuality.LOW); var bmp:Bitmap = new Bitmap(myBitmapData); this.addChild(bmp);
encode | () | 方法 |
public function encode(rect:Rectangle, compressor:Object, byteArray:ByteArray = null):ByteArray
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 11.3, AIR 3.3 |
使用選取的壓縮程式演算法壓縮這個 BitmapData 物件,並傳回新的 ByteArray 物件。或者,將產生的資料寫入指定的 ByteArray。compressor
引數會指定編碼演算法,並且可以是 PNGEncoderOptions、JPEGEncoderOptions 或 JPEGXREncoderOptions。
下列範例使用 JPEGEncoderOptions 壓縮 BitmapData 物件:
// Compress a BitmapData object as a JPEG file. var bitmapData:BitmapData = new BitmapData(640,480,false,0x00FF00); var byteArray:ByteArray = new ByteArray(); bitmapData.encode(new Rectangle(0,0,640,480), new flash.display.JPEGEncoderOptions(), byteArray);
參數
rect:Rectangle — 要壓縮的 BitmapData 物件區域。
| |
compressor:Object — 要使用的壓縮程式類型。有效值為 flash.display.PNGEncoderOptions 、flash.display.JPEGEncoderOptions 和 flash.display.JPEGXREncoderOptions 。
| |
byteArray:ByteArray (default = null ) — 要保留編碼影像的輸出 ByteArray。
|
ByteArray — 包含編碼影像的 ByteArray。
|
相關 API 元素
fillRect | () | 方法 |
public function fillRect(rect:Rectangle, color:uint):void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
以指定的 ARGB 顏色對像素的矩形區域填色。
參數
rect:Rectangle — 要填色的矩形區域。
| |
color:uint — 填滿區域的 ARGB 顏色值。 ARGB 顏色一般會以十六進位格式來指定,例如 0xFF336699。
|
擲回值
TypeError — rect 為 null。
|
相關 API 元素
範例 ( 如何使用本範例 )
import flash.display.Bitmap; import flash.display.BitmapData; import flash.geom.Rectangle; var myBitmapData:BitmapData = new BitmapData(40, 40, false, 0x0000FF00); var rect:Rectangle = new Rectangle(0, 0, 20, 20); myBitmapData.fillRect(rect, 0x0000FF); var bm:Bitmap = new Bitmap(myBitmapData); addChild(bm);
floodFill | () | 方法 |
public function floodFill(x:int, y:int, color:uint):void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
對於從 (x, y) 座標開始的影像,執行填色作業,並填入特定顏色。 floodFill()
方法和多種繪圖程式裡的油漆桶工具類似。 顏色為 ARGB 顏色,其中包含 Alpha 資訊和顏色資訊。
參數
x:int — 影像的 x 座標。
| |
y:int — 影像的 y 座標。
| |
color:uint — 當做填色使用的 ARGB 顏色。
|
範例 ( 如何使用本範例 )
(10, 10)
點所定義之像素,而且其中所有顏色都符合該點之顏色的區域。
import flash.display.Bitmap; import flash.display.BitmapData; import flash.geom.Rectangle; var myBitmapData:BitmapData = new BitmapData(40, 40, false, 0x0000FF00); var rect:Rectangle = new Rectangle(0, 0, 20, 20); myBitmapData.fillRect(rect, 0x000000FF); rect = new Rectangle(15, 15, 25, 25); myBitmapData.fillRect(rect, 0x000000FF); myBitmapData.floodFill(10, 10, 0x00FF0000); var bm:Bitmap = new Bitmap(myBitmapData); addChild(bm);
generateFilterRect | () | 方法 |
public function generateFilterRect(sourceRect:Rectangle, filter:BitmapFilter):Rectangle
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 9, AIR 1.0 |
指定 BitmapData 物件、來源矩形以及濾鏡物件,來決定 applyFilter()
方法呼叫所影響的目標矩形。
例如,模糊濾鏡通常會影響大於來源影像大小的區域。 由預設 BlurFilter 實體所篩選的 100 x 200 像素影像,其中 blurX = blurY = 4
會產生 (-2,-2,104,204)
的目標矩形。 generateFilterRect()
方法可讓您預先找出此目標矩形的大小,因此您可以在執行濾鏡操作前適當調整目標影像的大小。
有些濾鏡會依據來源影像大小來裁切其目標矩形。 例如,內部 DropShadow
不會產生大於來源影像的結果。 在此 API 中,BitmapData 物件是當做來源邊界來使用,而不是來源 rect
參數。
參數
sourceRect:Rectangle — 定義要用來做為輸入的來源影像區域之矩形。
| |
filter:BitmapFilter — 用來計算目標矩形的濾鏡物件。
|
Rectangle — 使用影像、sourceRect 參數和濾鏡來計算的目標矩形。
|
擲回值
TypeError — sourceRect 或 filter 都是 null。
|
範例 ( 如何使用本範例 )
generateFilterRect()
方法,決定模糊濾鏡的結果將佔用的矩形區域。 generateFilterRect()
方法的結果會透過 trace()
函數來輸出:
import flash.display.Bitmap; import flash.display.BitmapData; import flash.geom.Point; import flash.geom.Rectangle; import flash.filters.BlurFilter; var bmd:BitmapData = new BitmapData(80, 30, false, 0xFFCC00); var rect:Rectangle = new Rectangle(10, 10, 40, 10); bmd.fillRect(rect, 0xFF0000); var pt:Point = new Point(10, 10); var filter:BlurFilter = new BlurFilter(); trace(bmd.generateFilterRect(rect, filter)); // (x=8, y=8, w=44, h=14) bmd.applyFilter(bmd, rect, pt, filter); var bm:Bitmap = new Bitmap(bmd); addChild(bm);
generateFilterRect()
方法無法套用這個濾鏡。 呼叫 applyFilter()
方法來套用該濾鏡。
getColorBoundsRect | () | 方法 |
public function getColorBoundsRect(mask:uint, color:uint, findColor:Boolean = true):Rectangle
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
決定矩形區域,將位於點陣圖影像內所有指定顏色的像素全部封閉起來 (如果 findColor
參數設為 true
),或者將不包含指定顏色的所有像素封閉起來 (如果 findColor
參數設為 false
)。
例如,如果您有一個來源影像,而且想要決定包含非零 Alpha 色版的影像矩形,請傳遞 {mask: 0xFF000000, color: 0x00000000}
做為參數。 如果 findColor
參數設為 true
,則會搜尋整個影像,以找出 (value & mask) == color
的像素邊界 (其中 value
是指像素的顏色值)。 如果 findColor
參數設為 false
,則會搜尋整個影像,以找出 (value & mask) ! 的像素邊界= color
的像素邊界 (其中 value
是指像素的顏色值)。 若要決定影像周圍的空白,請傳遞 {mask: 0xFFFFFFFF, color: 0xFFFFFFFF}
以尋找非白色像素的邊界。
參數
mask:uint — 十六進位值,指定要考量的 ARGB 顏色的位元。 該顏色值是使用 & (位元 AND) 運算子,與此十六進位值相結合。
| |
color:uint — 十六進位值,用來指定要符合 (當 findColor 設為 true ) 或「不」要符合 (當 findColor 設為 false 的 ARGB 顏色)。
| |
findColor:Boolean (default = true ) — 如果值設定為 true ,則傳回影像的顏色值邊界。 如果值設定為 false ,則傳回影像中不存在此顏色的邊界。
|
Rectangle — 指定顏色的影像區域。
|
範例 ( 如何使用本範例 )
getColorBoundsRect()
方法來決定其中像素為紅色 (0xFF0000) 的矩形,然後再呼叫相同的方法,決定其中像素不是紅色的矩形 (藉由將 findColor
參數設為 false
:
import flash.display.Bitmap; import flash.display.BitmapData; import flash.geom.Rectangle; var bmd:BitmapData = new BitmapData(80, 40, false, 0xFFFFFF); var rect:Rectangle = new Rectangle(0, 0, 80, 20); bmd.fillRect(rect, 0xFF0000); var maskColor:uint = 0xFFFFFF; var color:uint = 0xFF0000; var redBounds:Rectangle = bmd.getColorBoundsRect(maskColor, color, true); trace(redBounds); // (x=0, y=0, w=80, h=20) var notRedBounds:Rectangle = bmd.getColorBoundsRect(maskColor, color, false); trace(notRedBounds); // (x=0, y=20, w=80, h=20) var bm:Bitmap = new Bitmap(bmd); addChild(bm);
getPixel | () | 方法 |
public function getPixel(x:int, y:int):uint
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
傳回整數,代表在特定點 (x, y) 上 BitmapData 物件的 RGB 像素值。 getPixel()
方法會傳回未相乘的像素值。 不會傳回任何 Alpha 資訊。
BitmapData 物件裡的所有像素都會當作預先相乘的顏色值來儲存。 預先相乘的影像像素具有已和 Alpha 資料相乘的紅、綠和藍的顏色色版值。 例如,如果 Alpha 值為 0,則 RGB 色版的值也為 0,與未相乘的值無關。 這種資料遺失狀況可能導致執行操作時的一些問題。 所有的 BitmapData 方法都會採用並傳回未相乘的值。 內部像素形式在傳回數值之前會從預先相乘轉換為未相乘。 在集合操作中,像素值會在設定原始影像像素前會預先相乘。
參數
x:int — 像素的 x 位置。
| |
y:int — 像素的 y 位置。
|
uint — 代表 RGB 像素值的數字。 如果 (x, y) 座標位於影像的邊界外,則此方法會傳回 0。
|
相關 API 元素
範例 ( 如何使用本範例 )
getPixel()
方法來決定左上角像素的顏色值:
import flash.display.BitmapData; var bmd:BitmapData = new BitmapData(80, 40, false, 0xFF0000); var pixelValue:uint = bmd.getPixel(0, 0); trace(pixelValue.toString(16)); // ff0000;
getPixel32 | () | 方法 |
public function getPixel32(x:int, y:int):uint
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
傳回 ARGB 顏色數值,其中包含 Alpha 色版資料和 RGB 資料。 此方法和 getPixel()
方法類似,都會傳回不具 Alpha 色版資料的 RGB 顏色。
BitmapData 物件裡的所有像素都會當作預先相乘的顏色值來儲存。 預先相乘的影像像素具有已和 Alpha 資料相乘的紅、綠和藍的顏色色版值。 例如,如果 Alpha 值為 0,則 RGB 色版的值也為 0,與未相乘的值無關。 這種資料遺失狀況可能導致執行操作時的一些問題。 所有的 BitmapData 方法都會採用並傳回未相乘的值。 內部像素形式在傳回數值之前會從預先相乘轉換為未相乘。 在集合操作中,像素值會在設定原始影像像素前會預先相乘。
參數
x:int — 像素的 x 位置。
| |
y:int — 像素的 y 位置。
|
uint — 代表 ARGB 像素值的數字。 如果 (x, y) 座標位於影像的邊界外,則會傳回 0。
|
相關 API 元素
範例 ( 如何使用本範例 )
getPixel32()
方法來決定左上角像素的顏色值,接著再決定每個顏色組件 (Alpha、紅色、綠色與藍色) 的十六進位值:
import flash.display.BitmapData; var bmd:BitmapData = new BitmapData(80, 40, true, 0xFF44AACC); var pixelValue:uint = bmd.getPixel32(0, 0); var alphaValue:uint = pixelValue >> 24 & 0xFF; var red:uint = pixelValue >> 16 & 0xFF; var green:uint = pixelValue >> 8 & 0xFF; var blue:uint = pixelValue & 0xFF; trace(alphaValue.toString(16)); // ff trace(red.toString(16)); // 44 trace(green.toString(16)); // aa trace(blue.toString(16)); // cc
getPixels | () | 方法 |
public function getPixels(rect:Rectangle):ByteArray
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
從像素資料的矩形區域產生位元組陣列。 將每個像素的無正負號整數 (32 位元未相乘的像素值) 寫入位元組陣列中。
參數
rect:Rectangle — 位於目前 BitmapData 物件的矩形區域。
|
ByteArray — ByteArray,代表指定之矩形中的像素。
|
擲回值
TypeError — rect 為 null。
|
相關 API 元素
範例 ( 如何使用本範例 )
getPixels()
方法在 ByteArray 物件中填入 BitmapData 物件的像素值。
import flash.display.BitmapData; import flash.geom.Rectangle; import flash.utils.ByteArray; var bmd:BitmapData = new BitmapData(80, 40, true); var seed:int = int(Math.random() * int.MAX_VALUE); bmd.noise(seed); var bounds:Rectangle = new Rectangle(0, 0, bmd.width, bmd.height); var pixels:ByteArray = bmd.getPixels(bounds);
getVector | () | 方法 |
histogram | () | 方法 |
public function histogram(hRect:Rectangle = null):Vector.<Vector.<Number>>
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5, Flash Lite 4 |
計算 BitmapData 物件的 256 色二進位長條圖。這個方法會傳回包含 4 個 Vector 的 Vector 物件。<Number> 實體 (4 個包含 Number 物件的 Vector 物件)。這 4 個 Vector 實體依序代表紅色、綠色、藍色和 Alpha 組件。每個 Vector 實體都包含 256 個值,分別代表個別組件值的填入次數 (從 0 至 255)。
參數
hRect:Rectangle (default = null ) — BitmapData 物件要使用的區域。
|
Vector.<Vector.<Number>> |
hitTest | () | 方法 |
public function hitTest(firstPoint:Point, firstAlphaThreshold:uint, secondObject:Object, secondBitmapDataPoint:Point = null, secondAlphaThreshold:uint = 1):Boolean
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
在一個點陣圖影像和一個點、矩形或其它點陣圖影像之間,執行像素層級作用區域偵測。 碰撞定義為某個點或矩形在一個不透明像素上重疊,或兩個重疊的不透明像素。在執行碰撞測試時,不會考慮任一個物件的延伸、旋轉或其它變化。
如果影像是不透明影像,則此方法會將其視為完全不透明的矩形。 若要執行考量透明度的像素層級碰撞測試,兩個影像必須都為透明影像。 當您在測試兩個透明影像時,會將控制 Alpha 色版值 (從 0 到 255) 的 Alpha 臨界值參數視為不透明。
參數
firstPoint:Point — 在任意座標空間裡,BitmapData 影像的左上角位置。 相同的座標空間會用在 secondBitmapPoint 參數上。
| |
firstAlphaThreshold:uint — 此碰撞測試中被視為不透明的最小 Alpha 色版值。
| |
secondObject:Object — Rectangle、Point、Bitmap 或 BitmapData 物件。
| |
secondBitmapDataPoint:Point (default = null ) — 用來定義第二個 BitmapData 物件之像素位置的點。 僅在 secondObject 的值為 BitmapData 物件時才使用此參數。
| |
secondAlphaThreshold:uint (default = 1 ) — 在第二個 BitmapData 物件中被視為不透明的最小 Alpha 色版值。僅在 secondObject 的值為 BitmapData 物件,且兩個 BitmapData 物件都為透明時才使用此參數。
|
Boolean — 如果作用區域有感應,則為 true 值,否則為 false 。
|
擲回值
ArgumentError — secondObject 參數不是一個 Point、Rectangle、Bitmap,或 BitmapData 物件。
| |
TypeError — firstPoint 為 null。
|
範例 ( 如何使用本範例 )
hitTest()
方法 (將 Point 物件當做 secondObject
)。 在第一次呼叫中,Point 物件會定義 BitmapData 物件的左上角 (此處為透明);而在第二次呼叫中,Point 物件會定義 BitmapData 物件的中心處 (此處為不透明)。
import flash.display.BitmapData; import flash.geom.Rectangle; import flash.geom.Point; var bmd1:BitmapData = new BitmapData(80, 80, true, 0x00000000); var rect:Rectangle = new Rectangle(20, 20, 40, 40); bmd1.fillRect(rect, 0xFF0000FF); var pt1:Point = new Point(1, 1); trace(bmd1.hitTest(pt1, 0xFF, pt1)); // false var pt2:Point = new Point(40, 40); trace(bmd1.hitTest(pt1, 0xFF, pt2)); // true
lock | () | 方法 |
public function lock():void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 9, AIR 1.0 |
鎖定影像,以便當這個 BitmapData 物件變更時,其它參照此 BitmapData 物件 (例如 Bitmap 物件) 的任何物件不會跟著更新。 若要改善效能,請在您多次呼叫 setPixel()
或 setPixel32()
方法之前與之後,搭配使用這方法與 unlock()
方法。
相關 API 元素
範例 ( 如何使用本範例 )
picture
的 bitmapData
屬性來建立 BitmapData 物件。 接著,它會先呼叫 lock()
方法,再呼叫複雜的自訂函數 complexTransformation()
,這個自訂函數會修改 BitmapData 物件。 (picture
物件和 complexTransformation()
函數都尚未在此範例中定義)。 即使 complexTransformation()
函數更新了 picture
物件的 bitmapData
屬性,變更會一直等到程式碼呼叫 bitmapData
物件上的 unlock()
方法:
import flash.display.BitmapData; var bitmapData:BitmapData = picture.bitmapData; bitmapData.lock(); bitmapData = complexTransformation(bitmapData); bitmapData.unlock(); picture.bitmapData = bitmapData;
merge | () | 方法 |
public function merge(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, redMultiplier:uint, greenMultiplier:uint, blueMultiplier:uint, alphaMultiplier:uint):void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
執行從來源影像到目標影像的每個色版的混合。 程式會根據來源和目標像素的色版值,為每個色版和每個像素計算新值。 例如,在紅色色版中,新值的計算方式如下 (其中 redSrc
是來源影像中像素的紅色色版值,而 redDest
則是目標影像中對應像素的紅色色版值):
new redDest = [(redSrc * redMultiplier) + (redDest * (256 - redMultiplier))] / 256;
redMultiplier
、greenMultiplier
、blueMultiplier
和 alphaMultiplier
值都是每個顏色色版的倍數。 請使用介於 0
到 0x100
(256) 之間的十六進位值,其中 0
指定在結果中使用來自目標的完整數值,0x100
指定使用來自來源的完整數值,中間的數字則指定使用混合 (例如 0x80
代表 50%)。
參數
sourceBitmapData:BitmapData — 要使用的輸入點陣圖影像。 來源影像可以是不一樣的 BitmapData 物件,或者參照到目前的 BitmapData 物件。
| |
sourceRect:Rectangle — 定義要用來做為輸入的來源影像區域之矩形。
| |
destPoint:Point — 目標影像 (目前 BitmapData 實體) 內對應至來源矩形左上角的點。
| |
redMultiplier:uint — 十六進位 uint 值,用來與紅色色版值相乘。
| |
greenMultiplier:uint — 十六進位 uint 值,用來與綠色色版值相乘。
| |
blueMultiplier:uint — 十六進位 uint 值,用來與藍色色版值相乘。
| |
alphaMultiplier:uint — 十六進位 uint 值,用來與 Alpha 透明度值相乘。
|
擲回值
TypeError — sourceBitmapData、sourceRect 或 destPoint 都是 null。
|
範例 ( 如何使用本範例 )
merge()
方法,將第二個 BitmapData 像素合併至第一個 BitmapData 物件中,但僅限於指定的矩形區域:
import flash.display.Bitmap; import flash.display.BitmapData; import flash.geom.Rectangle; import flash.geom.Point; var bmd1:BitmapData = new BitmapData(100, 80, true, 0xFF00FF00); var bmd2:BitmapData = new BitmapData(100, 80, true, 0xFFFF0000); var rect:Rectangle = new Rectangle(0, 0, 20, 20); var pt:Point = new Point(20, 20); var mult:uint = 0x80; // 50% bmd1.merge(bmd2, rect, pt, mult, mult, mult, mult); var bm1:Bitmap = new Bitmap(bmd1); addChild(bm1); var bm2:Bitmap = new Bitmap(bmd2); addChild(bm2); bm2.x = 110;
noise | () | 方法 |
public function noise(randomSeed:int, low:uint = 0, high:uint = 255, channelOptions:uint = 7, grayScale:Boolean = false):void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 9, AIR 1.0 |
以呈現隨機雜點的像素來填色影像。
參數
randomSeed:int — 要使用的隨機種子數字。 如果您保持其它所有參數不變,就可以變化隨機種子值來產生不同的虛擬亂數結果。 雜點函數是一種對應函數,而不是真正的隨機數字產生函數,因此它每次都會從相同的隨機種子產生相同的結果。
| |
low:uint (default = 0 ) — 每個色版所能產生的最低值 (0 到 255)。
| |
high:uint (default = 255 ) — 每個色版所能產生的最高值 (0 到 255)。
| |
channelOptions:uint (default = 7 ) — 可以是下列四個顏色色版之任何值組合的數字 (BitmapDataChannel.RED 、BitmapDataChannel.BLUE 、BitmapDataChannel.GREEN 和 BitmapDataChannel.ALPHA )。 您可以使用邏輯 OR 運算子 | 來合併色版值。
| |
grayScale:Boolean (default = false ) — Boolean 值。 如果值為 true ,則會將所有顏色色版設為相同值以建立灰階影像。 將此參數設為 true 不會影響所選取的 Alpha 色版。
|
相關 API 元素
flash.display.BitmapDataChannel.BLUE
flash.display.BitmapDataChannel.GREEN
flash.display.BitmapDataChannel.ALPHA
範例 ( 如何使用本範例 )
noise()
方法。 不過,您需要將該 grayscale
參數設定為 false
以便呼叫第一個物件的 noise()
方法,而設定為 true
以便呼叫第二個物件的 noise()
方法:
import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.BitmapDataChannel; var bmd1:BitmapData = new BitmapData(80, 80); var bmd2:BitmapData = new BitmapData(80, 80); var seed:int = int(Math.random() * int.MAX_VALUE); bmd1.noise(seed, 0, 0xFF, BitmapDataChannel.RED, false); bmd2.noise(seed, 0, 0xFF, BitmapDataChannel.RED, true); var bm1:Bitmap = new Bitmap(bmd1); this.addChild(bm1); var bm2:Bitmap = new Bitmap(bmd2); this.addChild(bm2); bm2.x = 90;
paletteMap | () | 方法 |
public function paletteMap(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, redArray:Array = null, greenArray:Array = null, blueArray:Array = null, alphaArray:Array = null):void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
重新對應影像 (最多具有四個顏色面板資料陣列) 中的顏色色版值,每個顏色色版值對應一個色版。
Flash 執行階段會使用下列步驟來產生結果影像:
- 在計算了紅、綠、藍和 Alpha 值之後,就會使用標準 32 位元整數數值將這些值加總起來。
- 每個像素的紅、綠、藍和 Alpha 色版值會擷取至個別 0 至 255 的值。 這些值會用來查詢適當陣列中的新顏色值:
redArray
、greenArray
、blueArray
和alphaArray
。 這四個陣列中的每一個都應該包含 256 個值。 - 在全部擷取完這四種新色版值之後,會將這些值結合成標準的 ARGB 值以套用至像素中。
此方法可以支援跨色版特效。 每個輸入陣列可以包含完整的 32 位元值,而且當這些值加總在一起時不會進位。 這個程序不支援每個色版的固定。
如果沒有為色版指定陣列,則僅會將顏色色版從來源影像複製到目標影像。
您可以使用這個方法產生各種不同的特效,如一般面板對應 (使用一個色版並將它轉換為 false 顏色影像)。 您也可以使用此方法來進行各種進階色彩操作演算法,如 Gamma、曲線、色階和量子化。
參數
sourceBitmapData:BitmapData — 要使用的輸入點陣圖影像。 來源影像可以是不一樣的 BitmapData 物件,或者參照到目前的 BitmapData 實體。
| |
sourceRect:Rectangle — 定義要用來做為輸入的來源影像區域之矩形。
| |
destPoint:Point — 目標影像 (目前 BitmapData 物件) 內對應至來源矩形左上角的點。
| |
redArray:Array (default = null ) — 如果 redArray 不是 null ,則 red = redArray[source red value] else red = source rect value 。
| |
greenArray:Array (default = null ) — 如果 greenArray 不是 null ,則 green = greenArray[source green value] else green = source green value. 。
| |
blueArray:Array (default = null ) — 如果 blueArray 不是 null ,則 blue = blueArray[source blue value] else blue = source blue value 。
| |
alphaArray:Array (default = null ) — 如果 alphaArray 不是 null ,則 alpha = alphaArray[source alpha value] else alpha = source alpha value 。
|
擲回值
TypeError — sourceBitmapData、sourceRect 或 destPoint 都是 null。
|
範例 ( 如何使用本範例 )
paletteMap()
方法,將 BitmapData 物件下半部矩形中的紅色替換為綠色:
import flash.display.Bitmap; import flash.display.BitmapData; import flash.geom.Rectangle; import flash.geom.Point; var myBitmapData:BitmapData = new BitmapData(80, 80, false, 0x00FF0000); myBitmapData.fillRect(new Rectangle(20, 20, 40, 40), 0x0000FF00); var redArray:Array = new Array(256); var greenArray:Array = new Array(256); for(var i:uint = 0; i < 255; i++) { redArray[i] = 0x00000000; greenArray[i] = 0x00000000; } redArray[0xFF] = 0x0000FF00; greenArray[0xFF] = 0x00FF0000; var bottomHalf:Rectangle = new Rectangle(0, 0, 100, 40); var pt:Point = new Point(0, 0); myBitmapData.paletteMap(myBitmapData, bottomHalf, pt, redArray, greenArray); var bm1:Bitmap = new Bitmap(myBitmapData); addChild(bm1);
perlinNoise | () | 方法 |
public function perlinNoise(baseX:Number, baseY:Number, numOctaves:uint, randomSeed:int, stitch:Boolean, fractalNoise:Boolean, channelOptions:uint = 7, grayScale:Boolean = false, offsets:Array = null):void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 9, AIR 1.0 |
產生 Perlin 雜點影像。
Perlin 雜點產生演算法會插入並結合個別的隨機雜點函數 (稱為 octave) 為單一函數,以產生看起來更自然的隨機雜點。 就像音樂的八度音一樣,每個 octave 函數是前一個函數頻率的兩倍。 Perlin 雜點被描述為「雜點的不規則總和」,因為它結合了多組雜點資料和不同層級的細節。
Perlin 雜點函數可以用來模擬自然現象和山水風情,如木紋、雲朵和山脈。 在大部分情況下,Perlin 雜點函數的輸出並不會直接顯示出來,而是用來加強其它影像與賦予這些影像虛擬亂數的變化。
簡單的數位隨機雜點函數通常會產生具有粗大對比粒子的影像。 這樣的粗大對比在自然界是找不到的。 Perlin 雜點演算法會混合多個運作不同層級細節的雜點函數。 此演算法會讓相鄰像素值有較平滑的變化結果。
參數
baseX:Number — 用在 x 方向的頻率。 例如,若要產生大小為 64 x 128 影像的雜點,需要傳遞的 baseX 值為 64。
| |
baseY:Number — 用在y 方向的頻率。 例如,若要產生大小為 64 x 128 影像的雜點,需要傳遞的 baseY 值為 128。
| |
numOctaves:uint — 建立此雜點所需結合的 octave 或是個別的雜點函數數量。 更多的 octave 會產生細節更豐富的影像。 更多的 octave 同時需要更長的處理時間。
| |
randomSeed:int — 要使用的隨機種子數字。 如果您保持其它所有參數不變,就可以變化隨機種子值來產生不同的虛擬亂數結果。 Perlin 雜點函數是一種對應函數,而不是真正的隨機數字產生函數,因此它每次都會從相同的隨機種子產生相同的結果。
| |
stitch:Boolean — Boolean 值。 如果值為 true ,則方法會嘗試平滑化處理影像的轉換邊緣,以建立無接縫的拼貼底紋做為點陣圖填色。
| |
fractalNoise:Boolean — Boolean 值。 如果值為 true ,則方法會產生不規則雜點;否則會產生亂流。 帶有亂流的影像具有明顯不連續的漸層,可讓它產生較逼近、鮮明的視覺效果,例如火焰和海浪。
| |
channelOptions:uint (default = 7 ) — 可以是下列四個顏色色版之任何值組合的數字 (BitmapDataChannel.RED 、BitmapDataChannel.BLUE 、BitmapDataChannel.GREEN 和 BitmapDataChannel.ALPHA )。 您可以使用邏輯 OR 運算子 | 來合併色版值。
| |
grayScale:Boolean (default = false ) — Boolean 值。 如果值為 true ,則會將每個紅色、綠色和藍色的顏色色版設為相同值以建立灰階影像。 如果將此值設定為 true ,將不會影響 Alpha 色版值。
| |
offsets:Array (default = null ) — 對應至每個 octave 之 x 和 y 偏移的點陣列。 藉由操作偏移值,您可以平滑地捲動 perlinNoise 影像的圖層。 在偏移陣列中的每個點會影響特定的 octave 雜點函數。
|
範例 ( 如何使用本範例 )
perlinNoise()
方法來產生紅色與藍色水彩效果:
import flash.display.Bitmap; import flash.display.BitmapData; var bmd:BitmapData = new BitmapData(200, 200, false, 0x00CCCCCC); var seed:Number = Math.floor(Math.random() * 10); var channels:uint = BitmapDataChannel.RED | BitmapDataChannel.BLUE; bmd.perlinNoise(100, 80, 6, seed, false, true, channels, false, null); var bm:Bitmap = new Bitmap(bmd); addChild(bm);
pixelDissolve | () | 方法 |
public function pixelDissolve(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, randomSeed:int = 0, numPixels:int = 0, fillColor:uint = 0):int
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 9, AIR 1.0 |
執行從來源影像至目標影像,或使用相同影像的像素溶解效果。 Flash 執行階段會使用 randomSeed
值來產生隨機像素溶解效果。函數的傳回值必須傳遞至後續的呼叫中,以持續進行像素溶解效果直到完成為止。
如果來源影像不等於目標影像,就會使用所有的屬性將像素由來源複製到目標。 這樣一來,就可讓空白影像經過溶解處理而產生一張完全填滿的影像。
如果來源影像等於目標影像,則會以 color
參數對像素進行填色。 這樣一來,將會溶解為非完全填滿的影像。 在這種模式中,會忽略目標 point
參數。
參數
sourceBitmapData:BitmapData — 要使用的輸入點陣圖影像。 來源影像可以是不一樣的 BitmapData 物件,或者參照到目前的 BitmapData 實體。
| |
sourceRect:Rectangle — 定義要用來做為輸入的來源影像區域之矩形。
| |
destPoint:Point — 目標影像 (目前 BitmapData 實體) 內對應至來源矩形左上角的點。
| |
randomSeed:int (default = 0 ) — 用來開始像素溶解效果的隨機種子。
| |
numPixels:int (default = 0 ) — 預設值為來源區域的 1/30 (寬度 x 高度)。
| |
fillColor:uint (default = 0 ) — 使用 ARGB 顏色值對來源值等於目標值的像素進行填色。
|
int — 在後續的呼叫所使用的新隨機種子值。
|
擲回值
TypeError — sourceBitmapData、sourceRect 或 destPoint 都是 null。
| |
TypeError — numPixels 值為負值。
|
範例 ( 如何使用本範例 )
pixelDissolve()
方法將一個灰色 BitmapData 物件轉換成紅色的,一次會溶解 40 個像素直到所有像素都變更顏色為止:
import flash.display.BitmapData; import flash.display.Bitmap; import flash.geom.Point; import flash.geom.Rectangle; import flash.utils.Timer; import flash.events.TimerEvent; var bmd:BitmapData = new BitmapData(100, 80, false, 0x00CCCCCC); var bitmap:Bitmap = new Bitmap(bmd); addChild(bitmap); var tim:Timer = new Timer(20); tim.start(); tim.addEventListener(TimerEvent.TIMER, timerHandler); function timerHandler(event:TimerEvent):void { var randomNum:Number = Math.floor(Math.random() * int.MAX_VALUE); dissolve(randomNum); } function dissolve(randomNum:Number):void { var rect:Rectangle = bmd.rect; var pt:Point = new Point(0, 0); var numberOfPixels:uint = 100; var red:uint = 0x00FF0000; bmd.pixelDissolve(bmd, rect, pt, randomNum, numberOfPixels, red); var grayRegion:Rectangle = bmd.getColorBoundsRect(0xFFFFFFFF, 0x00CCCCCC, true); if(grayRegion.width == 0 && grayRegion.height == 0 ) { tim.stop(); } }
scroll | () | 方法 |
public function scroll(x:int, y:int):void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 9, AIR 1.0 |
以一定的 (x, y) 像素量來捲動影像。 捲動區域外圍的邊緣區域維持不變。
參數
x:int — 水平捲動的量。
| |
y:int — 垂直捲動的量。
|
範例 ( 如何使用本範例 )
import flash.display.Bitmap; import flash.display.BitmapData; import flash.geom.Rectangle; var bmd:BitmapData = new BitmapData(80, 80, true, 0xFFCCCCCC); var rect:Rectangle = new Rectangle(0, 0, 40, 40); bmd.fillRect(rect, 0xFFFF0000); var bm:Bitmap = new Bitmap(bmd); addChild(bm); trace (bmd.getPixel32(50, 20).toString(16)); // ffcccccccc bmd.scroll(30, 0); trace (bmd.getPixel32(50, 20).toString(16)); // ffff0000
setPixel | () | 方法 |
public function setPixel(x:int, y:int, color:uint):void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
設定 BitmapData 物件的單一像素。 目前的影像像素 Alpha 色版值會在此作業期間保留下來。 RGB 顏色參數值會被視為未相乘的顏色值。
注意:為了提升效能,當您重複使用 setPixel()
或 setPixel32()
方法時,請先呼叫 lock()
方法,再呼叫 setPixel()
或 setPixel32()
方法,然後在完成所有像素變更之後呼叫 unlock()
方法。 這個程序可預防參照此 BitmapData 實體的物件,在您尚未完成像素變更之前提早進行更新。
參數
x:int — 數值會變更的像素 x 位置。
| |
y:int — 數值會變更的像素 y 位置。
| |
color:uint — 像素的最後 RGB 顏色。
|
相關 API 元素
範例 ( 如何使用本範例 )
setPixel()
方法,在 BitmapData 物件中繪製一條紅色線段:
import flash.display.Bitmap; import flash.display.BitmapData; var bmd:BitmapData = new BitmapData(80, 80, false, 0xCCCCCC); for (var i:uint = 0; i < 80; i++) { var red:uint = 0xFF0000; bmd.setPixel(i, 40, red); } var bm:Bitmap = new Bitmap(bmd); addChild(bm);
setPixel32 | () | 方法 |
public function setPixel32(x:int, y:int, color:uint):void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
設定 BitmapData 物件單一像素的顏色和 Alpha 透明度值。 此方法近似於 setPixel()
方法;最大的不同在於 setPixel32()
方法採用了包含 Alpha 色版資訊的 ARGB 顏色值。
BitmapData 物件裡的所有像素都會當作預先相乘的顏色值來儲存。 預先相乘的影像像素具有已和 Alpha 資料相乘的紅、綠和藍的顏色色版值。 例如,如果 Alpha 值為 0,則 RGB 色版的值也為 0,與未相乘的值無關。 這種資料遺失狀況可能導致執行操作時的一些問題。 所有的 BitmapData 方法都會採用並傳回未相乘的值。 內部像素形式在傳回數值之前會從預先相乘轉換為未相乘。 在集合操作中,像素值會在設定原始影像像素前會預先相乘。
注意:為了提升效能,當您重複使用 setPixel()
或 setPixel32()
方法時,請先呼叫 lock()
方法,再呼叫 setPixel()
或 setPixel32()
方法,然後在完成所有像素變更之後呼叫 unlock()
方法。 這個程序可預防參照此 BitmapData 實體的物件,在您尚未完成像素變更之前提早進行更新。
參數
x:int — 數值會變更的像素 x 位置。
| |
y:int — 數值會變更的像素 y 位置。
| |
color:uint — 像素的最後 ARGB 顏色。 如果點陣圖不透明,則會忽略此顏色值的 Alpha 透明度部分。
|
相關 API 元素
範例 ( 如何使用本範例 )
setPixel32()
方法,在 BitmapData 物件中繪製一條透明 (Alpha == 0x60) 紅色線段:
import flash.display.Bitmap; import flash.display.BitmapData; var bmd:BitmapData = new BitmapData(80, 80, true, 0xFFCCCCCC); for (var i:uint = 0; i < 80; i++) { var red:uint = 0x60FF0000; bmd.setPixel32(i, 40, red); } var bm:Bitmap = new Bitmap(bmd); addChild(bm);
setPixels | () | 方法 |
public function setPixels(rect:Rectangle, inputByteArray:ByteArray):void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 9, AIR 1.0, Flash Lite 4 |
將位元組陣列轉換為像素資料的矩形區域。 對於每個像素,會呼叫 ByteArray.readUnsignedInt()
方法,並將傳回值寫入像素中。 如果位元組陣列在寫入完整的矩形之前就結束,就會傳回函數。 位元組陣列中的資料預期將為 32 位元 ARGB 像素值。 無論像素是否讀取,都不會在位元組陣列上執行搜尋。
參數
rect:Rectangle — 指定 BitmapData 物件的矩形區域。
| |
inputByteArray:ByteArray — ByteArray 物件,包含了 32 位元未相乘像素值,可用在矩形區域中。
|
擲回值
EOFError — inputByteArray 物件並未包含足夠的資料來填滿 rect 矩形區域。 此方法在擲回例外之前,會儘可能地對更多的像素填色。
| |
TypeError — rect 或 inputByteArray 都是 null。
|
相關 API 元素
範例 ( 如何使用本範例 )
getPixels()
和 setPixels()
方法,將某個 BitmapData 物件的像素複製到另一個物件:
import flash.display.Bitmap; import flash.display.BitmapData; import flash.utils.ByteArray; import flash.geom.Rectangle; var bmd1:BitmapData = new BitmapData(100, 100, true, 0xFFCCCCCC); var bmd2:BitmapData = new BitmapData(100, 100, true, 0xFFFF0000); var rect:Rectangle = new Rectangle(0, 0, 100, 100); var bytes:ByteArray = bmd1.getPixels(rect); bytes.position = 0; bmd2.setPixels(rect, bytes); var bm1:Bitmap = new Bitmap(bmd1); addChild(bm1); var bm2:Bitmap = new Bitmap(bmd2); addChild(bm2); bm2.x = 110;
setVector | () | 方法 |
public function setVector(rect:Rectangle, inputVector:Vector.<uint>):void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5, Flash Lite 4 |
將向量轉換為像素資料的矩形區域。對於每一個象素,讀取 Vector 元素並寫入 BitmapData 像素。Vector 中的資料預期將為 32 位元 ARGB 像素值。
參數
rect:Rectangle — 指定 BitmapData 物件的矩形區域。
| |
inputVector:Vector.<uint> — Vector 物件,包含了 32 位元未相乘像素值,可用在矩形區域中。
|
擲回值
RangeError — 向量陣列不夠大,無法讀取所有像素資料。
|
threshold | () | 方法 |
public function threshold(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, operation:String, threshold:uint, color:uint = 0, mask:uint = 0xFFFFFFFF, copySource:Boolean = false):uint
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 9, AIR 1.0 |
根據指定的臨界值來測試影像的像素值,並設定將測試傳遞至新顏色值的像素。 使用 threshold()
方法,您可以獨立和取代影像的顏色範圍,並在影像像素上執行其它邏輯運算。
threshold()
方法的測試邏輯如下所示:
- 如果
((pixelValue & mask) operation (threshold & mask))
,則將像素設為color
; - 否則,如果為
copySource == true
,則將像素設為來自sourceBitmap
的對應像素值。
operation
參數會指定用於臨界值測試的比較運算子。 例如,您可以將 "==" 當作 operation
參數來使用,將影像中的特定顏色值獨立出來。 或使用 {operation: "<", mask: 0xFF000000, threshold: 0x7F000000, color: 0x00000000}
,在來源影像像素的 Alpha 值小於 0x7F 時,將所有目標像素設定為完全透明。 您可以將這個技巧用於動畫般的轉換和其它特效。
參數
sourceBitmapData:BitmapData — 要使用的輸入點陣圖影像。 來源影像可以是不一樣的 BitmapData 物件,或者參照到目前的 BitmapData 實體。
| |
sourceRect:Rectangle — 定義要用來做為輸入的來源影像區域之矩形。
| |
destPoint:Point — 目標影像 (目前 BitmapData 實體) 內對應至來源矩形左上角的點。
| |
operation:String — 將下列其中一個比較運算子當做「字串」傳遞: "<", "<=", ">", ">=", "==", "!="
| |
threshold:uint — 用來測試每個像素的數值,以檢視是否符合或超過臨界值。
| |
color:uint (default = 0 ) — 如果臨界值測試成功,所設定的像素顏色值。 預設值為 0x00000000。
| |
mask:uint (default = 0xFFFFFFFF ) — 用來將顏色組件獨立出來的遮色片。
| |
copySource:Boolean (default = false ) — 如果值為 true ,當臨界值測試失敗時,來源影像的像素值會複製到目標。 如果值為 false ,當臨界值測試失敗時將不會複製來源影像。
|
uint — 變更的像素數目。
|
擲回值
TypeError — sourceBitmapData、sourceRect、destPoint,或 operation 都是 null。
| |
ArgumentError — 操作字串不是有效的操作。
|
範例 ( 如何使用本範例 )
perlinNoise()
方法,將藍色與紅色圖樣加入至 BitmapData 物件中,接著使用 threshold()
方法,將這些像素從第一個 BitmapData 物件複製到第二個物件,並在像素設定為透明紅色 (0x20FF0000) 的情況下,取代其中紅色值大於 0x80 (50%) 的像素:
import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.BitmapDataChannel; import flash.geom.Point; import flash.geom.Rectangle; var bmd1:BitmapData = new BitmapData(200, 200, true, 0xFFCCCCCC); var seed:int = int(Math.random() * int.MAX_VALUE); var channels:uint = BitmapDataChannel.RED | BitmapDataChannel.BLUE; bmd1.perlinNoise(100, 80, 12, seed, false, true, channels, false, null); var bitmap1:Bitmap = new Bitmap(bmd1); addChild(bitmap1); var bmd2:BitmapData = new BitmapData(200, 200, true, 0xFFCCCCCC); var pt:Point = new Point(0, 0); var rect:Rectangle = new Rectangle(0, 0, 200, 200); var threshold:uint = 0x00800000; var color:uint = 0x20FF0000; var maskColor:uint = 0x00FF0000; bmd2.threshold(bmd1, rect, pt, ">", threshold, color, maskColor, true); var bitmap2:Bitmap = new Bitmap(bmd2); bitmap2.x = bitmap1.x + bitmap1.width + 10; addChild(bitmap2);
unlock | () | 方法 |
public function unlock(changeRect:Rectangle = null):void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 9, AIR 1.0 |
解除鎖定影像,以便當這個 BitmapData 物件變更時,其它參照此 BitmapData 物件 (例如 Bitmap 物件) 的任何物件不會跟著更新。 若要改善效能,請在您多次呼叫 setPixel()
或 setPixel32()
方法之前與之後,搭配使用這方法與 lock()
方法。
參數
changeRect:Rectangle (default = null ) — 已經變更的 BitmapData 物件區域。 如果您沒有為這個參數指定一個值,則會將整個 BitmapData 物件區域視為已變更。這個參數需要 Flash Player 9.0.115.0 版或更新版本。
|
相關 API 元素
範例 ( 如何使用本範例 )
picture
的 bitmapData
屬性來建立 BitmapData 物件。 接著,它會先呼叫 lock()
方法,再呼叫複雜的自訂函數 complexTransformation()
,這個自訂函數會修改 BitmapData 物件。 (picture
物件和 complexTransformation()
函數都尚未在此範例中定義)。 即使 complexTransformation()
函數更新了 picture
物件的 bitmapData
屬性,變更會一直等到程式碼呼叫 bitmapData
物件上的 unlock()
方法:
import flash.display.BitmapData; var bitmapData:BitmapData = picture.bitmapData; bitmapData.lock(); bitmapData = complexTransformation(bitmapData); bitmapData.unlock(); picture.bitmapData = bitmapData;
threshold()
方法將新顏色套用至已經通過測試的像素。 您可以執行下列步驟來完成這項工作:
- 會建立
url
屬性,此屬性為影像檔的位置與名稱。 - 此類別建構函式會建立 Loader 物件,然後將事件偵聽程式實體化,並且在
completeHandler()
方法完成影像操作後傳送。 - 然後將
request
URLRequest 物件傳送至loader.load()
,並使用顯示物件將影像載入記憶體。 - 影像接著會被放置到顯示清單中,並於螢幕上 x = 0, y = 0 的座標位置顯示該影像。
- 此
completeHandler()
方法接著會進行下列動作:- 建立第二個 Loader 物件,並建立以此 Loader 物件初始化的 Bitmap 物件。
- 建立第二個點陣圖物件,
duplicate
,此物件會反過來呼叫duplicateImage()
方法,以建立原始影像的副本。 - 建立 BitmapData 物件並指定給
duplicate
物件的 BitmapData 物件。 - 建立新的 Rectangle 物件,並使用與原始影像相同的座標、寬度與高度。
- 建立新的 Point 物件,並將其座標預設為 x = 0, y = 0。
- 建立下列變數:
operation
— 當臨界值大於或等於原始值時,就會套用新的顏色。threshold
— 每個像素都會針對其進行比較的值 (在此範例中則是 Alpha 值為 0xCC 的淺灰色)。color
— 通過臨界值測試,而且為像素所設定的顏色 (在此範例中則是純黃色)。mask
— 完全對比的顏色 (透明藍色)。copySource
— 設為false
,表示如果臨界值並未通過,就不會複製像素值。由於影像會重製,並且只會變更通過臨界測試的像素,所以這個值並不具意義。
- 使用上面的變數來呼叫
threshold()
方法。 產生的臨界值方程式如下:if (current pixel Value & 0x000000FF) >= (0xCCCCCCCC & 0x000000FF) then set pixel to 0xFFFFFF00
。
注意:
- 在編譯 SWF 檔時,您必須將「本機播放安全性」設定為「只存取本機檔案」。
- 在此範例中,您需要將名為 Image.gif 的檔案放在與 SWF 檔案所處的相同目錄中。
- 我們建議您使用寬度最多約為 80 像素的影像。
package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Loader; import flash.display.Sprite; import flash.events.*; import flash.geom.Point; import flash.geom.Rectangle; import flash.net.URLRequest; public class BitmapDataExample extends Sprite { private var url:String = "Image.gif"; private var size:uint = 80; public function BitmapDataExample() { configureAssets(); } private function configureAssets():void { var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler); loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); var request:URLRequest = new URLRequest(url); loader.x = size * numChildren; loader.load(request); addChild(loader); } private function duplicateImage(original:Bitmap):Bitmap { var image:Bitmap = new Bitmap(original.bitmapData.clone()); image.x = size * numChildren; addChild(image); return image; } private function completeHandler(event:Event):void { var loader:Loader = Loader(event.target.loader); var image:Bitmap = Bitmap(loader.content); var duplicate:Bitmap = duplicateImage(image); var bitmapData:BitmapData = duplicate.bitmapData; var sourceRect:Rectangle = new Rectangle(0, 0, bitmapData.width, bitmapData.height); var destPoint:Point = new Point(); var operation:String = ">="; var threshold:uint = 0xCCCCCCCC; var color:uint = 0xFFFFFF00; var mask:uint = 0x000000FF; var copySource:Boolean = true; bitmapData.threshold(bitmapData, sourceRect, destPoint, operation, threshold, color, mask, copySource); } private function ioErrorHandler(event:IOErrorEvent):void { trace("Unable to load image: " + url); } } }
Tue Jun 12 2018, 03:47 PM Z