2010年12月12日 星期日

[AS3] BitmapData.getPixel()方法 - 擷取BitmapData 物件特定點 (x, y) 上 的 RGB 像素值

getPixel(x:int, y:int):uint
傳回整數,代表 BitmapData 物件中特定點 (x, y) 的 RGB 像素值。
toString(radix:uint):String
傳回 int 物件的字串形式。
 radix:uint — 會指定用於數字到字串轉換的底數 (從 2 到 36)。 如果您並未指定 radix 參數,預設值會是 10。

(例一)
深藍色為主場景背景色。

左上角 300x200 大小的 0xaabbff 色塊為 BitmapData 物件所定義:
var bmData:BitmapData = new BitmapData(300, 200, true, 0xffaabbff);
 ( 並透過Bitmap類別顯示在主場景(50,50)位置,即 bm.x = 50; bm.y = 50; )

以 var pixelValue:uint = bmData.getPixel(0, 0); 擷取 bmData 上座標(0,0)位置的RGB畫素值,
並指定給pixelValue。這個座標(0,0)是屬於bmData的local座標,而非主場景座標。
此時pixelValue為10進位整數。因此以 pixelValue.toString(16) 轉換與傳回 16 進位數值的字串形式。

300x200 大小的bmData物件,其座標範圍在 (0, 0) ~ (299, 199)
當使用getPixel()方法指定擷取點時,不能超過此範圍,否則會傳回 0 值 。




import flash.display.BitmapData;

//
var bmData:BitmapData = new BitmapData(300, 200, true, 0xffaabbff);
//
var pixelValue:uint = bmData.getPixel(0, 0);
trace(pixelValue.toString(16));
tf.text = pixelValue.toString(16);
//
var bm:Bitmap = new Bitmap(bmData);
bm.x = 50;
bm.y = 50;
addChild(bm);


(例二)
將元件庫中的點陣圖設定為內嵌資源類別,類別名稱為 MyPhoto,基底類別為 BitmapData。
再以 new 運算子建構 MyPhoto 實體,並指定給名為 bmData 的 BitmapData型態變數。
var bmData:BitmapData = new MyPhoto(0, 0);
此處 new MyPhoto(0, 0)的(0, 0)本應指定點陣圖類別實體的寬與高,但其實不會有作用,
bmData物件所載入的點陣圖寬高,將遵循元件庫中的圖檔寬高。

以 var pixelValue:uint = bmData.getPixel(599, 425); 擷取 bmData 上座標(599, 425)位置的RGB畫素值。




import flash.display.BitmapData;

//
var bmData:BitmapData = new MyPhoto(0, 0);
//
var pixelValue:uint = bmData.getPixel(599, 425);
trace(pixelValue.toString(16));
tf.text = pixelValue.toString(16);
//
var bm:Bitmap = new Bitmap(bmData);
//bm.width = 550;
//bm.height = 400;
bm.x = 0;
bm.y = 0;
addChild(bm);
addChild(tf);
addChild(comment);

沒有留言: