套件flash.display
類別public class BitmapData
繼承BitmapData Inheritance Object
實作 IBitmapDrawable

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

BitmapData 類別可讓您使用 Bitmap 物件的資料 (像素)。 您可以使用 BitmapData 類別的方法來建立任意調整大小的透明或不透明點陣圖影像,而且在執行階段中以各種方式操作。 您也可以存取使用 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.componentXDisplacementMapFilter.componentY 屬性搭配使用時,這四個色版會以數字來表示,而這些數字會在 BitmapDataChannel 類別中以下列常數表示:

您可以使用 Bitmap 物件的 bitmapData 屬性,將 BitmapData 物件附加至 Bitmap 物件。

您可以利用 Graphics.beginBitmapFill() 方法,使用 BitmapData 物件來填滿 Graphics 物件。

BitmapData 物件的最大寬度和高度為 2880 像素。

如果 BitmapData 物件無效的話 (例如,如果 BitmapData 物件擁有 height == 0width == 0),或其已經透過 dispose() 加以處理,呼叫 BitmapData 物件的任何方法或屬性都會擲出 ArgumentError 錯誤。

檢視範例

請參閱

flash.display.Bitmap.bitmapData
flash.display.Graphics.beginBitmapFill()
flash.display.Loader


公用 屬性
 屬性定義自
 Inheritedconstructor : Object
類別物件的參照或是特定物件實體的建構函數。
Object
  height : int
[read-only] 點陣圖影像的高度,以像素為單位。
BitmapData
 Inheritedprototype : Object
[static] 類別或函數物件之原型物件的參照。
Object
  rect : Rectangle
[read-only] 定義點陣圖影像大小和位置的矩形。
BitmapData
  transparent : Boolean
[read-only] 定義點陣圖影像是否支援每個像素透明度。
BitmapData
  width : int
[read-only] 點陣圖影像的寬度,以像素為單位。
BitmapData
公用 方法
 方法定義自
  
BitmapData(width:int, height:int, transparent:Boolean = true, fillColor:uint = 0xFFFFFFFF)
以指定的寬度和高度來建立 BitmapData 物件。
BitmapData
  
applyFilter(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, filter:BitmapFilter):void
採用來源影像和濾鏡物件並產生已套用濾鏡的影像。
BitmapData
  
傳回具有和內含點陣圖完全相同副本、且為原始實體副本的新 BitmapData 物件。
BitmapData
  
使用 ColorTransform 物件調整點陣圖影像指定區域中的顏色值。
BitmapData
  
compare(otherBitmapData:BitmapData):Object
比較兩個 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
  
draw(source:IBitmapDrawable, matrix:Matrix = null, colorTransform:ColorTransform = null, blendMode:String = null, clipRect:Rectangle = null, smoothing:Boolean = false):void
使用 Flash Player 的向量描繪器,在點陣圖影像上繪製來源顯示物件。
BitmapData
  
fillRect(rect:Rectangle, color:uint):void
以指定的 ARGB 顏色對像素的矩形區域填色。
BitmapData
  
floodFill(x:int, y:int, color:uint):void
對於從 (x, y) 座標開始的影像,執行填色作業,並填入特定顏色。
BitmapData
  
指定 BitmapData 物件、來源矩形以及濾鏡物件,來決定 applyFilter() 方法呼叫所影響的目標矩形。
BitmapData
  
getColorBoundsRect(mask:uint, color:uint, findColor:Boolean = true):Rectangle
決定矩形區域,將位於點陣圖影像內所有指定顏色的像素全部封閉起來 (如果 findColor 參數設為 true),或者將不包含指定顏色的所有像素封閉起來 (如果 findColor 參數設為 false)。
BitmapData
  
傳回整數,代表 BitmapData 物件中特定點 (x, y) 的 RGB 像素值。
BitmapData
  
傳回 ARGB 顏色數值,其中包含 Alpha 色版資料和 RGB 資料。
BitmapData
  
從像素資料的矩形區域產生位元組陣列。
BitmapData
 Inherited
指出物件是否有已定義的指定屬性。
Object
  
hitTest(firstPoint:Point, firstAlphaThreshold:uint, secondObject:Object, secondBitmapDataPoint:Point = null, secondAlphaThreshold:uint = 1):Boolean
在一個點陣圖影像和一個點、矩形或其它點陣圖影像之間,執行像素層級作用區域偵測。
BitmapData
 Inherited
指出 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
 Inherited
指出指定的屬性是否存在,以及是否可列舉。
Object
  
scroll(x:int, y:int):void
以一定的 (x, y) 像素量來捲動影像。
BitmapData
  
setPixel(x:int, y:int, color:uint):void
設定 BitmapData 物件的單一像素。
BitmapData
  
setPixel32(x:int, y:int, color:uint):void
設定 BitmapData 物件單一像素的顏色和 Alpha 透明度值。
BitmapData
  
setPixels(rect:Rectangle, inputByteArray:ByteArray):void
將位元組陣列轉換為像素資料的矩形區域。
BitmapData
 Inherited
為迴圈作業設定動態屬性的可用性。
Object
  
threshold(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, operation:String, threshold:uint, color:uint = 0, mask:uint = 0xFFFFFFFF, copySource:Boolean = false):uint
根據指定的臨界值來測試影像的像素值,並設定將測試傳遞至新顏色值的像素。
BitmapData
 Inherited
會傳回指定之物件的字串形式。
Object
  
unlock(changeRect:Rectangle = null):void
解除鎖定影像,以便當這個 BitmapData 物件變更時,其它參照此 BitmapData 物件 (例如 Bitmap 物件) 的任何物件不會跟著更新。
BitmapData
 Inherited
會傳回指定之物件的基本值。
Object
屬性詳細資訊
height屬性
height:int  [read-only]

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

點陣圖影像的高度,以像素為單位。


實作
    public function get height():int
rect屬性 
rect:Rectangle  [read-only]

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

定義點陣圖影像大小和位置的矩形。 矩形的頂端和左側的位置都是 0;寬度和高度等於 BitmapData 物件的像素寬度和高度。


實作
    public function get rect():Rectangle
transparent屬性 
transparent:Boolean  [read-only]

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

定義點陣圖影像是否支援每個像素透明度。 您只可以在建構 BitmapData 物件時設定此值,方法為將建構函式的 transparent 參數傳遞為 true。 接著,在您建立 BitmapData 物件之後,可以藉由判斷 transparent 屬性的值是否為 true,來檢查它是否支援每個像素透明度。


實作
    public function get transparent():Boolean
width屬性 
width:int  [read-only]

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

點陣圖影像的寬度,以像素為單位。


實作
    public function get width():int
建構函式詳細資訊
BitmapData()建構函式
public function BitmapData(width:int, height:int, transparent:Boolean = true, fillColor:uint = 0xFFFFFFFF)

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

以指定的寬度和高度來建立 BitmapData 物件。 如果指定 fillColor 參數的值,點陣圖中的每個像素都會設定為此顏色。

根據預設,建立的點陣圖為透明,除非您傳遞 false 值供 transparent 參數使用。 當您建立不透明的點陣圖時,就無法再變更為透明的點陣圖。 不透明點陣圖中的每個像素,僅使用 24 位元的顏色色版資訊。 如果將點陣圖定義為透明,每個像素會使用 32 位元的顏色色版資訊,包含 Alpha 透明度色版。

BitmapData 物件的最大寬度和高度為 2880 像素。 如果指定的寬度或高度值大於 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 — 寬度及/或高度無效 (小於或等於 0、大於 2880)
方法詳細資訊
applyFilter()方法
public function applyFilter(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, filter:BitmapFilter):void

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

採用來源影像和濾鏡物件並產生已套用濾鏡的影像。

此方法會依賴內建濾鏡物件的行為,該物件會決定受到輸入來源矩形影響的目標矩形。

套用濾鏡之後,結果影像會比輸入影像大。 例如,如果使用 BlurFilter 類別來模糊化 (50,50,100,100) 的來源矩形以及 (10,10) 的目標點,目標影像中變更的區域將會因為模糊化而比 (10,10,60,60) 大。 這通常會在呼叫 applyFilter() 時,在內部發生。

如果 sourceBitmapData 參數的 sourceRect 參數是一個內部區域,如在一個 200 x 200 影像的 (50,50,100,100) 中,濾鏡會使用 sourceRect 參數外部的來源像素來產生目標矩形。

如果 BitmapData 物件與指定為 sourceBitmapData 參數的物件是同一個物件,則 Flash Player 會使用物件的暫存副本來執行濾鏡操作。 為了達到最佳效能,請避免這種情況發生。

參數

sourceBitmapData:BitmapData — 要使用的輸入點陣圖影像。 來源影像可以是不一樣的 BitmapData 物件,或者參照到目前的 BitmapData 實體。
 
sourceRect:Rectangle — 定義要用來做為輸入的來源影像區域之矩形。
 
destPoint:Point — 目標影像 (目前 BitmapData 實體) 內對應至來源矩形左上角的點。
 
filter:BitmapFilter — 用來執行濾鏡操作的濾鏡物件。 每種類型的濾鏡都有特定的需求,如下列所示:
  • BlurFilter — 這個濾鏡可以使用不透明或是透明的來源和目標影像。 如果影像的格式不符合,在套用濾鏡期間所產生的來源影像副本就會符合目標影像格式。
  • BevelFilter、DropShadowFilter、GlowFilter、ChromeFilter — 這些濾鏡的目標影像必須是透明的影像。 呼叫 DropShadowFilter 或 GlowFilter 會建立一個影像,其中包含投影或光暈的 Alpha 色版資料。 它不會將投影建立在目標影像上。 如果這些濾鏡之一用在不透明的目標影像上,就會擲回 ActionScript 3.0 的例外。
  • ConvolutionFilter — 這個濾鏡可以使用不透明或是透明的來源和目標影像。
  • ColorMatrixFilter — 這個濾鏡可以使用不透明或是透明的來源和目標影像。
  • DisplacementMapFilter — 這個濾鏡可以使用不透明或是透明的來源和目標影像,但是來源和目標影像的格式必須一樣。


擲回值
TypeError — sourceBitmapData、sourceRect、destPoint 或濾鏡都是 null。
 
IllegalOperationError — BitmapData 物件的透明度與濾鏡操作不相容。

請參閱


範例

下列範例將說明如何將模糊濾鏡套用至 BitmapData 實體:

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
Player 版本 : Flash Player 9

傳回具有和內含點陣圖完全相同副本、且為原始實體副本的新 BitmapData 物件。

傳回值
BitmapData — 具有和原始物件完全相同的新 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:ColorTransform):void

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

使用 ColorTransform 物件調整點陣圖影像指定區域中的顏色值。 如果矩形符合點陣圖影像的邊界,則此方法將會變化整個影像的顏色值。

參數

rect:Rectangle — 定義 ColorTransform 物件套用之影像區域的 Rectangle 物件。
 
colorTransform:ColorTransform — 用來說明要套用之顏色變化值的 ColorTransform 物件。


擲回值
TypeError — rect 或 colorTransform 都是 null。

請參閱


範例

下列範例將說明如何將顏色變化套用至 BitmapData 物件的左半邊 (矩形)。

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
Player 版本 : Flash Player 9

比較兩個 BitmapData 物件。 如果兩個 BitmapData 物件都具有相同的尺寸 (寬度與高度),則方法會傳回新的 BitmapData 物件,而且在兩個來源物件中的所有像素裡,每個像素就是其它像素的「色差」:

例如,假設有下列兩個 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 值上有些許色差 (0xFF8800 與 0xCC6600)。 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。

範例

下列範例將顯示 BitmapData 物件中的像素值,該物件是藉由將相同尺寸的兩個 BitmapData 物件加以比較所產生:

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
Player 版本 : Flash Player 9

從另一個 BitmapData 物件或目前 BitmapData 物件的一個色版,將資料傳送到目前 BitmapData 物件的色版。 在目標 BitmapData 物件裡其它色版中的所有資料都會保留下來。

來源色版值和目標色版值可能為下列值的其中之一:

參數

sourceBitmapData:BitmapData — 要使用的輸入點陣圖影像。 來源影像可以是不一樣的 BitmapData 物件,或者參照到目前的 BitmapData 物件。
 
sourceRect:Rectangle — 來源 Rectangle 物件。 如果您只想要複製點陣圖中較小區域的色版資料,請指定小於 BitmapData 物件整體大小的來源矩形。
 
destPoint:Point — 目標 Point 物件,代表將放置新色版資料的矩形區域之左上角。 如果您只想要將色版資料從某個區域複製到目標影像的不同區域上,請指定 (0,0) 以外的點。
 
sourceChannel:uint — 來源色版。 使用來自 BitmapDataChannel 類別 (BitmapDataChannel.REDBitmapDataChannel.BLUEBitmapDataChannel.GREENBitmapDataChannel.ALPHA) 的值。
 
destChannel:uint — 目標色版。 使用來自 BitmapDataChannel 類別 (BitmapDataChannel.REDBitmapDataChannel.BLUEBitmapDataChannel.GREENBitmapDataChannel.ALPHA) 的值。


擲回值
TypeError — sourceBitmapData、sourceRect 或 destPoint 都是 null。

請參閱


範例

下列範例將說明如何將 BitmapData 物件中的紅色色版複製到該物件的藍色色版,並置於 20 x 20 的像素區域中:

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
Player 版本 : Flash Player 9

在影像之間提供執行不含延伸、旋轉或顏色特效的像素處理快速程序。 這個方法會將來源影像的矩形區域,複製到目標 BitmapData 物件之目標點上相同大小的矩形區域中。

如果包含 alphaBitmapalphaPoint 參數,則可以使用次要的影像當作來源影像的 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。

範例

下列範例將說明如何從某個 BitmapData 物件的 20 x 20 像素區域中,將像素複製到另一個 BitmapData 物件:

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;
dispose()方法 
public function dispose():void

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

釋放用來儲存 BitmapData 物件的記憶體。

某個影像呼叫 dispose() 方法時,會將此影像的高度和寬度都設定為 0。 所有針對此 BitmapData 實體之方法或屬性的後續呼叫都會失敗,並擲回例外。


範例

下列範例將說明在呼叫 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:ColorTransform = null, blendMode:String = null, clipRect:Rectangle = null, smoothing:Boolean = false):void

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

使用 Flash Player 的向量描繪器,在點陣圖影像上繪製 source 顯示物件。 您可以指定 matrixcolorTransformblendMode,以及目標 clipRect 參數來控制顯示的執行方式。 或者,您也可以指定是否在點陣圖縮放時平滑化處理 (只有當來源物件是 BitmapData 物件才能這麼處理)。

這個方法會直接對應至編寫工具介面中使用物件標準向量描繪器來繪製物件的方式。

來源顯示物件並不會針對此呼叫使用所套用的任何變形。 會將它當做存在於元件庫或檔案中,而且不具有矩陣變形、顏色轉換和混合模式。 若要藉由使用顯示物件的轉換屬性來加以繪製 (例如繪製影片片段),可以將其 transform 屬性物件複製到使用 BitmapData 物件之 Bitmap 物件的 transform 屬性上。

注意:source 物件及其所有子物件 (在 Sprite 或 MovieClip 物件的情況下) 必須來自與呼叫者相同的網域,或必須位於呼叫者可存取的 SWF 檔中 (藉由呼叫 Security.allowDomain() 方法進行存取)。 如果不符合這些條件,則 draw() 方法就無法繪製任何東西。

此方法在 Flash Player 更新 3 和更新版本中可透過 RTMP 支援。您可以在伺服器端 Script 中控制 Flash Media Server 上串流的存取。 如需詳細資訊,請參閱「Adobe Flash Media Server 伺服器端 ActionScript 語言參考」中的 Client.audioSampleAccessClient.videoSampleAccess 屬性。

參數

source:IBitmapDrawable — 要繪製到 BitmapData 物件的顯示物件或 BitmapData 物件 (DisplayObject 與 BitmapData 類別會實作 IBitmapDrawable 介面)。
 
matrix:Matrix (default = null) — 用來縮放、旋轉或轉譯點陣圖之座標的 Matrix 物件。 如果您不想將矩陣變化套用到影像上,請使用預設的 new Matrix() 建構函式,或傳遞 null 值,將此參數設為單位矩陣。
 
colorTransform: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

在將 smoothing 設定為 true 的情況下,繪製點陣圖的時間會較將 smoothing 設定為 false 所花的繪製時間長。


擲回值
ArgumentError source 參數不是一個 BitmapData 或 DisplayObject 物件。
 
SecurityError source 物件及其所有子物件 (在 Sprite 或 MovieClip 物件的情況下) 不是來自與呼叫者相同的網域,也不是位於呼叫者可存取的 SWF 檔中 (藉由呼叫 Security.allowDomain() 方法進行存取)。
 
ArgumentError — 來源若不是 null,就是無效的 IBitmapDrawable 物件。

請參閱


範例

下列範例將說明如何在 BitmapData 物件上繪製 TextField 物件:

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);
fillRect()方法 
public function fillRect(rect:Rectangle, color:uint):void

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

以指定的 ARGB 顏色對像素的矩形區域填色。

參數

rect:Rectangle — 要填色的矩形區域。
 
color:uint — 填滿區域的 ARGB 顏色值。 ARGB 顏色一般會以十六進位格式來指定,例如 0xFF336699。


擲回值
TypeError — 矩形為 null。

請參閱


範例

下列範例將說明如何在 BitmapData 物件的矩形區域上填滿藍色:

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
Player 版本 : Flash Player 9

對於從 (x, y) 座標開始的影像,執行填色作業,並填入特定顏色。 floodFill() 方法和多種繪圖程式裡的油漆桶工具類似。 顏色為 ARGB 顏色,其中包含 Alpha 資訊和顏色資訊。

參數

x:int — 影像的 x 座標。
 
y:int — 影像的 y 座標。
 
color:uint — 當做填色使用的 ARGB 顏色。


範例

下列範例將說明如何以紅色填滿 BitmapData 物件的某個區域,也就是圍繞 (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
Player 版本 : Flash Player 9

指定 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
Player 版本 : Flash Player 9

決定矩形區域,將位於點陣圖影像內所有指定顏色的像素全部封閉起來 (如果 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 — 指定顏色的影像區域。

範例

下列範例會建立 BitmapData 物件,並在其像素上半部填滿紅色。 接著,它會呼叫 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
Player 版本 : Flash Player 9

傳回整數,代表在特定點 (x, y) 上 BitmapData 物件的 RGB 像素值。 getPixel() 方法會傳回未相乘的像素值。 不會傳回任何 Alpha 資訊。

BitmapData 物件裡的所有像素都會當作預先相乘的顏色值來儲存。 預先相乘的影像像素具有已和 Alpha 資料相乘的紅、綠和藍的顏色色版值。 例如,如果 Alpha 值為 0,則 RGB 色版的值也為 0,與未相乘的值無關。 這種資料遺失狀況可能導致執行操作時的一些問題。 所有的 BitmapData 方法都會採用並傳回未相乘的值。 內部像素形式在傳回數值之前會從預先相乘轉換為未相乘。 在集合操作中,像素值會在設定原始影像像素前會預先相乘。

參數

x:int — 像素的 x 位置。
 
y:int — 像素的 y 位置。

傳回值
uint — 代表 RGB 像素值的數字。 如果 (x, y) 座標位於影像的邊界外,則此方法會傳回 0。

請參閱


範例

下列範例會建立填滿紅色的 BitmapData 物件,然後使用 getPixel() 方法來決定左上角像素的顏色值:
import flash.display.BitmapData;

var bmd:BitmapData = new BitmapData(80, 40, false, 0xFF0000);

var pixelValue:uint = bmd.getPixel(1, 1);
trace(pixelValue.toString(16)); // ff0000;
getPixel32()方法 
public function getPixel32(x:int, y:int):uint

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

傳回 ARGB 顏色數值,其中包含 Alpha 色版資料和 RGB 資料。 此方法和 getPixel() 方法類似,都會傳回不具 Alpha 色版資料的 RGB 顏色。

BitmapData 物件裡的所有像素都會當作預先相乘的顏色值來儲存。 預先相乘的影像像素具有已和 Alpha 資料相乘的紅、綠和藍的顏色色版值。 例如,如果 Alpha 值為 0,則 RGB 色版的值也為 0,與未相乘的值無關。 這種資料遺失狀況可能導致執行操作時的一些問題。 所有的 BitmapData 方法都會採用並傳回未相乘的值。 內部像素形式在傳回數值之前會從預先相乘轉換為未相乘。 在集合操作中,像素值會在設定原始影像像素前會預先相乘。

參數

x:int — 像素的 x 位置。
 
y:int — 像素的 y 位置。

傳回值
uint — 代表 ARGB 像素值的數字。 如果 (x, y) 座標位於影像的邊界外,則會傳回 0。

請參閱


範例

下列範例會建立填滿某種顏色的 BitmapData 物件,然後使用 getPixel32() 方法來決定左上角像素的顏色值,接著再判斷每個組成顏色 (Alpha、紅色、綠色與藍色) 的十六進位值:

import flash.display.BitmapData;

var bmd:BitmapData = new BitmapData(80, 40, true, 0xFF44AACC);

var pixelValue:uint = bmd.getPixel32(1, 1);
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
Player 版本 : Flash Player 9

從像素資料的矩形區域產生位元組陣列。 將每個像素的無正負號整數 (32 位元未相乘的像素值) 寫入位元組陣列中。

參數

rect:Rectangle — 位於目前 BitmapData 物件的矩形區域。

傳回值
ByteArray — ByteArray,代表指定之 Rectangle 中的像素。

擲回值
TypeError — 矩形為 null。

請參閱


範例

下列範例會建立填滿隨機雜點像素的 BitmapData 物件,然後使用 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);
hitTest()方法 
public function hitTest(firstPoint:Point, firstAlphaThreshold:uint, secondObject:Object, secondBitmapDataPoint:Point = null, secondAlphaThreshold:uint = 1):Boolean

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

在一個點陣圖影像和一個點、矩形或其它點陣圖影像之間,執行像素層級作用區域偵測。 在執行碰撞測試時,不會考慮任一個物件的延伸、旋轉或其它變化。

如果影像是不透明影像,則此方法會將其視為完全不透明的矩形。 若要執行考量透明度的像素層級碰撞測試,兩個影像必須都為透明影像。 當您在測試兩個透明影像時,會將控制 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。

範例

下列範例會建立 BitmapData 物件,此物件只有在矩形區域 (20, 20, 40, 40) 中會不透明,並呼叫 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
Player 版本 : Flash Player 9

鎖定影像,以便當這個 BitmapData 物件變更時,其它參照此 BitmapData 物件 (例如 Bitmap 物件) 的任何物件不會跟著更新。 若要改善效能,請在您多次呼叫 setPixel()setPixel32() 方法之前與之後,搭配使用這方法與 unlock() 方法。

請參閱


範例

下列範例會根據 Bitmap 物件 picturebitmapData 屬性來建立 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
Player 版本 : Flash Player 9

執行從來源影像到目標影像的每個色版的混合。 程式會根據來源和目標像素的色版值,為每個色版和每個像素計算新值。 例如,在紅色色版中,新值的計算方式如下 (其中 redSrc 是來源影像中像素的紅色色版值,而 redDest 則是目標影像中對應像素的紅色色版值):

new redDest = [(redSrc * redMultiplier) + (redDest * (256 - redMultiplier))] / 256;

redMultipliergreenMultiplierblueMultiplieralphaMultiplier 值都是每個顏色色版的倍數。 請使用介於 00x100 (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。

範例

下列範例會建立兩個 BitmapData 物件。 這兩個物件都是 100 x 80 的像素大小。 第一個物件會填滿為綠色,而第二個物件則會填滿為紅色。 程式碼會呼叫 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
Player 版本 : Flash Player 9

以呈現隨機雜點的像素來填色影像。

參數

randomSeed:int — 要使用的隨機種子數字。 如果您保持其它所有參數不變,就可以變化隨機種子值來產生不同的虛擬亂數結果。 雜點函數是一種對應函數,而不是真正的隨機數字產生函數,因此它每次都會從相同的隨機種子產生相同的結果。
 
low:uint (default = 0) — 每個色版所能產生的最低值 (0 到 255)。
 
high:uint (default = 255) — 每個色版所能產生的最高值 (0 到 255)。
 
channelOptions:uint (default = 7) — 可以是下列四個顏色色版之任何值組合的數字 (BitmapDataChannel.REDBitmapDataChannel.BLUEBitmapDataChannel.GREENBitmapDataChannel.ALPHA)。 您可以使用邏輯 OR 運算子 | 來合併色版值。
 
grayScale:Boolean (default = false) — Boolean 值。 如果值為 true,則會將所有顏色色版設為相同值以建立灰階影像。 將此參數設為 true 不會影響所選取的 Alpha 色版。

請參閱


範例

下列範例會建立兩個 BitmapData 物件,並針對這兩個物件呼叫 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
Player 版本 : Flash Player 9

重新對應影像 (最多具有四個顏色面板資料陣列) 中的顏色色版值,每個顏色色版值對應一個色版。

Flash Player 會使用下列步驟來產生結果影像:

  1. 在計算了紅、綠、藍和 Alpha 值之後,就會使用標準 32 位元整數數值將這些值加總起來。
  2. 每個像素的紅、綠、藍和 Alpha 色版值會擷取至個別 0 至 255 的值。 這些值會用來查詢適當陣列中的新顏色值:redArraygreenArrayblueArrayalphaArray。 這四個陣列中的每一個都應該包含 256 個值。
  3. 在全部擷取完這四種新色版值之後,會將這些值結合成標準的 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。

範例

下列範例會建立綠色的 BitmapData 物件,該物件的正中央有個紅色方形,然後再使用 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

Player 版本 : Flash Player 9

產生 Perlin 雜點影像。

Perlin 雜點產生演算法會插入並結合個別的隨機雜點函數 (稱為 octave) 為單一函數,以產生看起來更自然的隨機雜點。 就像音樂的八度音一樣,每個 octave 函數是前一個函數頻率的兩倍。 Perlin 雜點被描述為「雜點的不規則總和」,因為它結合了多組雜點資料和不同層級的細節。

Perlin 雜點函數可以用來模擬自然現象和山水風情,如木紋、雲朵和山脈。 在大部分情況下,Perlin 雜點函數的輸出並不會直接顯示出來,而是用來加強其它影像與賦予這些影像虛擬亂數的變化。

簡單的數位隨機雜點函數通常會產生具有粗大對比粒子的影像。 這樣的粗大對比在自然界是找不到的。 Perlin 雜點演算法會混合多個運作不同層級細節的雜點函數。 此演算法會讓相鄰像素值有較平滑的變化結果。

注意:Perlin 雜點演算法是以開發此演算法的 Ken Perlin 命名,他為了 1982 年的電影「電子世界爭霸戰」(Tron) 的電腦影像需要而開發出這套演算法。 Perlin 因為 Perlin 雜點函數而在 1997 年得到奧斯卡的技術成就獎。

參數

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,則方法會嘗試平滑化處理影像的轉換邊緣,以建立無接縫的拼貼底紋做為點\'b0\'7d圖填色。
 
fractalNoise:Boolean — Boolean 值。 如果值為 true,則方法會產生不規則雜點;否則會產生亂流。 帶有亂流的影像具有明顯不連續的漸層,可讓它產生較逼近、鮮明的視覺效果,例如火焰和海浪。
 
channelOptions:uint (default = 7) — 可以是下列四個顏色色版之任何值組合的數字 (BitmapDataChannel.REDBitmapDataChannel.BLUEBitmapDataChannel.GREENBitmapDataChannel.ALPHA)。 您可以使用邏輯 OR 運算子 | 來合併色版值。
 
grayScale:Boolean (default = false) — Boolean 值。 如果值為 true,則會將每個紅色、綠色和藍色的顏色色版設為相同值以建立灰階影像。 如果將此值設定為 true,將不會影響 Alpha 色版值。
 
offsets:Array (default = null) — 對應至每個 octave 之 xy 偏移的點陣列。 藉由操作偏移值,您可以平滑地捲動 perlinNoise 影像的圖層。 在偏移陣列中的每個點會影響特定的 octave 雜點函數。


範例

下列範例將建立一個 200 x 200 像素的 BitmapData 物件,並呼叫 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
Player 版本 : Flash Player 9

執行從來源影像至目標影像,或使用相同影像的像素溶解效果。 Flash Player 會使用 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
Player 版本 : Flash Player 9

以一定的 (x, y) 像素量來捲動影像。 捲動區域外圍的邊緣區域維持不變。

參數

x:int — 水平捲動的量。
 
y:int — 垂直捲動的量。


範例

下列範例將說明捲動右側 40 像素位置之 Bitmap 資料物件的效果:

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
Player 版本 : Flash Player 9

設定 BitmapData 物件的單一像素。 目前的影像像素 Alpha 色版值會在此作業期間保留下來。 RGB 顏色參數值會被視為未相乘的顏色值。

注意:為了提升效能,當您重複使用 setPixel()setPixel32() 方法時,請先呼叫 lock() 方法,再呼叫 setPixel()setPixel32() 方法,然後在完成所有像素變更之後呼叫 unlock() 方法。 這個程序可預防參照此 BitmapData 實體的物件,在您尚未完成像素變更之前提早進行更新。

參數

x:int — 數值會變更的像素 x 位置。
 
y:int — 數值會變更的像素 y 位置。
 
color:uint — 像素的最後 RGB 顏色。

請參閱


範例

下列範例使用 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
Player 版本 : Flash Player 9

設定 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 透明度部分。

請參閱


範例

下列範例使用 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
Player 版本 : Flash Player 9

將位元組陣列轉換為像素資料的矩形區域。 對於每個像素,會呼叫 ByteArray.readUnsignedInt() 方法,並將傳回值寫入像素中。 如果位元組陣列在寫入完整的矩形之前就結束,就會傳回函數。 位元組陣列中的資料預期將為 32 位元 ARGB 像素值。 無論像素是否讀取,都不會在位元組陣列上執行搜尋。

參數

rect:Rectangle — 指定 BitmapData 物件的矩形區域。
 
inputByteArray:ByteArray — ByteArray 物件,包含了 32 位元未相乘像素值,可用在矩形區域中。


擲回值
EOFError inputByteArray 物件並未包含足夠的資料來填滿 rect 矩形區域。 此方法在擲回例外之前,會儘可能地對更多的像素填色。
 
TypeError — rect 或 inputByteArray 都是 null。

請參閱


範例

下列範例使用 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;
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
Player 版本 : Flash Player 9

根據指定的臨界值來測試影像的像素值,並設定將測試傳遞至新顏色值的像素。 使用 threshold() 方法,您可以獨立和取代影像的顏色範圍,並在影像像素上執行其它邏輯運算。

threshold() 方法的測試邏輯如下所示:

  1. 如果 ((pixelValue & mask) operation (threshold & mask)),則將像素設為 color
  2. 否則,如果為 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,當\'c1\'7b界值測試失敗時將不會複製來源影像。

傳回值
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
Player 版本 : Flash Player 9

解除鎖定影像,以便當這個 BitmapData 物件變更時,其它參照此 BitmapData 物件 (例如 Bitmap 物件) 的任何物件不會跟著更新。 若要改善效能,請在您多次呼叫 setPixel()setPixel32() 方法之前與之後,搭配使用這方法與 lock() 方法。

參數

changeRect:Rectangle (default = null) — 已經變更的 BitmapData 物件區域。 如果您沒有為這個參數指定一個值,則會將整個 BitmapData 物件區域視為已變更。

請參閱


範例

下列範例會根據 Bitmap 物件 picturebitmapData 屬性來建立 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;
範例 如何使用範例
BitmapDataExample.as

下列範例會使用 BitmapDataExample 類別,將 Image.gif 影像載入至 DisplayObject 中的預設位置 (0, 0)。 接著,再將此 Image.gif 的副本置於原影像的右方,此副本具有套用至使用 threshold() 方法將新顏色套用至已經通過測試的像素。 您可以執行下列步驟來完成這項工作:
  1. 會建立 url 屬性,此屬性為影像檔的位置與名稱。
  2. 此類別建構函式會建立 Loader 物件,然後將事件偵聽程式實體化,並且在 completeHandler() 方法完成影像操作後傳送。
  3. 然後將 request URLRequest 物件傳送至 loader.load(),並使用顯示物件將影像載入記憶體。
  4. 影像接著會被放置到顯示清單中,並於螢幕上 x = 0, y = 0 的座標位置顯示該影像。
  5. 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

注意:


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);
        }
    }
}




 

有新的意見加入至這個頁面時,傳送電子郵件給我 | 意見報告

目前頁面: http://livedocs.adobe.com/flash/9.0_tw/ActionScriptLangRefV3/flash/display/BitmapData.html