顯示具有 BitmapData 標籤的文章。 顯示所有文章
顯示具有 BitmapData 標籤的文章。 顯示所有文章

2012年3月4日 星期日

[AS3] 將點陣圖Bitmap物件使用於SimpleButton的四種按鈕狀態

SimpleButton(upState:DisplayObject = null, overState:DisplayObject = null, downState:DisplayObject = null, hitTestState:DisplayObject = null)
建立新的 SimpleButton 實體。
http://help.adobe.com/zh_TW/FlashPlatform/reference/actionscript/3/flash/display/SimpleButton.html


1010302__bitmapBtnTest_Jack.swf


import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.events.MouseEvent;
import flash.display.SimpleButton;

var bmd1:BitmapData = new BitmapData(100,100,true,0xff2266ff);
var bm1:Bitmap = new Bitmap(bmd1);
bm1.x=100;bm1.y=60;
/*this.addChild(bm1);*/

var bmd2:BitmapData = new BitmapData(100,100,true,0xffff0000);
var bm2:Bitmap = new Bitmap(bmd2);
bm2.x=100;bm2.y=60;
/*this.addChild(bm2);*/

var simpleButton:SimpleButton = new SimpleButton(bm1,bm2,null,bm1);
addChild(simpleButton);

simpleButton.addEventListener(MouseEvent.MOUSE_DOWN,mouseHandler);

function mouseHandler(event:MouseEvent):void{
 trace(event.type);
}

trace(getSize(simpleButton));


SimpleButton Inheritance DisplayObjectContainer Inheritance InteractiveObject Inheritance DisplayObject Inheritance EventDispatcher Inheritance Object
Bitmap Inheritance DisplayObject Inheritance EventDispatcher Inheritance Object

2012年1月3日 星期二

[AS3] AS3 內建的 BitmapData.hitTest()方法 - 像素級碰撞偵測

[AS3] AS3 內建的 BitmapData.hitTest()方法 - 像素級碰撞偵測
BitmapData.hitTest()方法:
BitmapData.hitTest(firstPoint:Point, firstAlphaThreshold:uint, secondObject:Object, secondBitmapDataPoint:Point = null, secondAlphaThreshold:uint = 1):Boolean

A. BitmapData.hitTest() 似乎是個常被忽略的方法
B. 這與 DisplayObject 的 hitTestObject() 或 hitTestPoint() 方法的能耐截然不同

















2012年1月2日 星期一

[AS3] BitmapData.scroll()方法 (捲動點陣圖內容)→ 發射了

scroll()方法
public function scroll(x:int, y:int):void
以一定的 (x, y) 像素量來捲動影像。 捲動區域外圍的邊緣區域維持不變。
BitmapData.colorTransform()
BitmapData.fillRect()










2011年11月23日 星期三

[AS3] 殘影效果 → 加上 z 軸的 Tween












2011年11月22日 星期二

[AS3] 殘影效果 → 加上BlurFilter、GrowFilter慮鏡

GlowFilter(color:uint = 0xFF0000, alpha:Number = 1.0, blurX:Number = 6.0, blurY:Number = 6.0, strength:Number = 2, quality:int = 1, inner:Boolean = false, knockout:Boolean = false)
以指定的參數初始化新的 GlowFilter 實體。
BlurFilter(blurX:Number = 4.0, blurY:Number = 4.0, quality:int = 1)
以指定的參數初始化濾鏡。










[AS3] 殘影效果→Tween動畫路徑

BitmapData.colorTransform()
BitmapData.draw()
Tween()建構函式
public function Tween(obj:Object, prop:String, func:Function, begin:Number, finish:Number, duration:Number, useSeconds:Boolean = false)
建立 Tween 類別的實體。 可以使用建構函數並搭配 new 運算子:var myTween:Tween = new Tween()。


2011年11月21日 星期一

[AS3] 殘影效果拖曳_BitmapData.colorTransform()、draw()

BitmapData.colorTransform()
BitmapData.draw()


[AS3] BitmapData.colorTransform()方法_改變點陣影像指定區域顏色值


BitmapData.colorTransform(rect:Rectangle, colorTransform:flash.geom:ColorTransform):void
使用 ColorTransform 物件調整點陣圖影像指定區域中的顏色值。 如果矩形符合點陣圖影像的邊界,則此方法將會變化整個影像的顏色值。
參數
rect:Rectangle — 定義 ColorTransform 物件套用之影像區域的 Rectangle 物件。
colorTransform:flash.geom:ColorTransform — 用來說明要套用之顏色轉換值的 ColorTransform 物件。




2011年1月17日 星期一

[AS3] 目標實體(點陣圖設為內嵌資源類別)的rotationX、rotationY值隨 mouseX、mouseY 與stage寬高中線的正負距離而漸變轉動

※將選用的點陣圖匯入元件庫,設定為內嵌資源類別,類別命名為MyPhoto

1000117_DisplayObject__mouseX_rotationY_3.swf




import flash.ui.Mouse;
import flash.events.MouseEvent;
import caurina.transitions.Tweener;
import flash.display.BitmapData;
import flash.display.MovieClip;
import flash.display.Bitmap;
//
var disX:int;
var disY:int;
//
var plane:MovieClip = new MovieClip();
addChild(plane);
var bmd:BitmapData = new MyPhoto();
var bm:Bitmap = new Bitmap(bmd);
plane.addChild(bm);
bm.scaleX = 0.9;
bm.scaleY = 0.9;

//bm左上角原對齊在plane的註冊點(0,0),調整bm中心點位置使對齊plane的註冊點(0,0)
bm.x = - bm.width/2;
bm.y = - bm.height/2;

//由於bm中心點位置經上述調整,正對齊plane的註冊點(0,0),也對齊stage的(0,0)
//想把plane從stage的(0,0)移動stage的中央,必須將stage的寬與高各除以2,指定給plane.x和plane.y
plane.x = stage.stageWidth/2;
plane.y = stage.stageHeight/2;

//
stage.addEventListener(MouseEvent.MOUSE_MOVE, rotateXY);
//
function rotateXY(e:MouseEvent):void{
 disX = mouseX - Math.ceil(stage.stageWidth/2);
 disY = mouseY - Math.ceil(stage.stageHeight/2);
 plane.rotationY = disX/16;
 plane.rotationX = -disY/16;
}

2011年1月1日 星期六

flash.utils套件__getDefinitionByName()函數 - 傳回所指定之類別的類別物件參照

getDefinitionByName()函數
public function getDefinitionByName(name:String):Object
傳回 name 參數所指定之類別的類別物件參照。
參數
name:String — 類別的名稱。
傳回值
Object — 會傳回 name 參數所指定之類別的類別物件參照。
擲回值
ReferenceError — 具有指定之名稱的公用定義不存在。




991231_GetDefinitionByName_1.swf



package  {
 import flash.utils.getDefinitionByName;
 import flash.display.Bitmap;
 import flash.display.BitmapData;
 import flash.display.Bitmap;
 import flash.display.Loader;
 //import flash.display.MovieClip;
 import flash.display.Sprite;
 import flash.net.URLRequest;
 import flash.events.Event;
 import flash.events.ProgressEvent;
 import flash.text.TextField;
 import flash.text.TextFieldAutoSize;
 //import flashx.textLayout.formats.FormatValue;
 import flash.text.TextFormat;

 public class GetDefinitionByName_1_991231 extends Sprite{
  //
  private var urlString:String = "991230_GetDefinitionByName_1.jpg";
  //
  //getDefinitionByName函數傳回flash.display.Loader類別的參照,指定給Class型別的classReference變數。
  private var classReference:Class = getDefinitionByName("flash.display.Loader") as Class;
  //new 運算子建構classReference類別實體,指定給Object型別的ldr變數。ldr已經參照了Loader類別。
  private var ldr:Object = new classReference();
  private var tf:TextField = new TextField();
  //
  public function GetDefinitionByName_1_991231() {
   setTextField();
   ldrFun();
  }
  
  //
  function setTextField():void{
   //
   var format:TextFormat = new TextFormat();
   with(format){
    color = 0xffffff;
    size = 86;
    font = "Arial";
   }
   //
   addChild(tf);
   with(tf){
    defaultTextFormat = format;
    x = 0;
    y = stage.stageHeight/2 -50 ;
    width = stage.stageWidth;
    autoSize = TextFieldAutoSize.CENTER;
   }
  };
  
  //
  private function ldrFun():void{
   ldr.load(new URLRequest(urlString));
   trace(urlString);
   ldr.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onLoaderProgress);
   ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
  }
  
  //
  private function onLoaderProgress(e:ProgressEvent):void{
   tf.text = String(Math.floor(e.bytesLoaded/e.bytesTotal*100));
  }
  
  //
  private function onComplete(e:Event):void{
   trace(ldr); // [object LoaderInfo]
   var ldrBm:Bitmap = e.currentTarget.content as Bitmap;
   var bmd :BitmapData = ldrBm.bitmapData;
   var bm:Bitmap = new Bitmap(bmd);
   trace(bmd); // [object BitmapData]
   addChild(bm);
   bm.x = 50;
   bm.y = 30;
  }

 }
 
}


適用於 Adobe Flash Professional CS5 的 ActionScript 3.0 參考__●flash.utils_getDefinitionByName()函數

2010年12月23日 星期四

[AS3] flash.filter.ColorMatrixFilter(matrix) - matrix變形矩陣改變對比(contrast)

原圖:


參考此篇處理方式:
UNDERSTANDING AS3 COLORMATRIXFILTER CLASS



● 提高點陣圖對比(contrast)

991223_ColorMF_contrast1.swf





package  {
 import flash.display.Sprite;
 import flash.filters.ColorMatrixFilter;
 import flash.display.BitmapData;
 import flash.display.Bitmap;
 import flash.display.DisplayObject;
 //
 public class ColorMF_contrast1_991223 extends Sprite{
  public var bmd:BitmapData = new MyPhoto(0,0);
  public var bm:Bitmap = new Bitmap(bmd);
  public function ColorMF_contrast1_991223() {
   addChild(bm);
   var matrix:Array = new Array();
   matrix = matrix.concat([2, 0, 0, 0, -40]); //RED Channel
   matrix = matrix.concat([0, 2, 0, 0, -40]); //GREEN Channel
   matrix = matrix.concat([0, 0, 2, 0, -40]); //BLUE Channel
   matrix = matrix.concat([0, 0, 0, 1, 0]); //ALPHA Channel
   var myFilter:ColorMatrixFilter = new ColorMatrixFilter(matrix);
   bm.filters = [myFilter];
  }

 }
}

2010年12月22日 星期三

[AS3] flash.filter.ColorMatrixFilter(matrix) - matrix變形矩陣改變飽合度(saturation)

變形矩陣示意圖



原圖:將被提升色彩飽合度。


參考此篇處理方式:
UNDERSTANDING AS3 COLORMATRIXFILTER CLASS

991221_ColorMF_saturation.swf  - ↓ 以下 swf 檔色彩飽合度已提升。





package  {
 import flash.display.Sprite;
 import flash.filters.ColorMatrixFilter;
 import flash.display.BitmapData;
 import flash.display.Bitmap;
 import flash.display.DisplayObject;
 //
 public class ColorMF_saturation_991221 extends Sprite{
  public var bmd:BitmapData = new MyPhoto(0,0);
  public var bm:Bitmap = new Bitmap(bmd);
  public function ColorMF_saturation_991221() {
   addChild(bm);
   var matrix:Array = new Array();
   matrix = matrix.concat([2, -1, 0, 0, 0]); //RED Channel
   matrix = matrix.concat([-1, 2, 0, 0, 0]); //GREEN Channel
   matrix = matrix.concat([0, -1, 2, 0, 0]); //BLUE Channel
   matrix = matrix.concat([0, 0, 0, 1, 0]); //ALPHA Channel
   var myFilter:ColorMatrixFilter = new ColorMatrixFilter(matrix);
   bm.filters = [myFilter];
  }

 }
 
}




參考此篇處理方式:Matrix Operations for Image Processing - Paul Haeberli




991221_ColorMF_saturation2.swf

● s = 1 ← 點陣圖為原值




991221_ColorMF_saturation2a.swf

● s = 1.8 或 大於1 ← 點陣圖色彩飽合度增加




991221_ColorMF_saturation2b.swf

● s = 0 ← 點陣圖變成灰階




991221_ColorMF_saturation2c.swf

● s = 0 ← 點陣圖變成互補色





package  {
 import flash.display.Sprite;
 import flash.filters.ColorMatrixFilter;
 import flash.display.BitmapData;
 import flash.display.Bitmap;
 import flash.display.DisplayObject;
 //
 public class ColorMF_saturation2_991221 extends Sprite{
  public var bmd:BitmapData = new MyPhoto(0,0);
  public var bm:Bitmap = new Bitmap(bmd);
  public function ColorMF_saturation2_991221() {
   addChild(bm);
   //
   var rwgt:Number = 0.3086;
   var gwgt:Number = 0.6094;
   var bwgt:Number = 0.0802;
   //
   var s:Number = 1;
   //
   var a:Number = (1.0-s)*rwgt + s;
      var b:Number = (1.0-s)*gwgt;
      var c:Number = (1.0-s)*bwgt;
      var d:Number = (1.0-s)*rwgt;
      var e:Number = (1.0-s)*gwgt + s;
      var f:Number = (1.0-s)*bwgt;
      var g:Number = (1.0-s)*rwgt;
      var h:Number = (1.0-s)*gwgt;
      var i:Number = (1.0-s)*bwgt + s;
   //
   var matrix:Array = new Array();
   matrix = matrix.concat([a, b, c, 0, 0]); //RED Channel
   matrix = matrix.concat([d, e, f, 0, 0]); //GREEN Channel
   matrix = matrix.concat([g, h, i, 0, 0]); //BLUE Channel
   matrix = matrix.concat([0, 0, 0, 1, 0]); //ALPHA Channel
   var myFilter:ColorMatrixFilter = new ColorMatrixFilter(matrix);
   bm.filters = [myFilter];
  }

 }
 
}

2010年12月21日 星期二

[AS3] flash.filter.ColorMatrixFilter(matrix) - matrix變形矩陣改變色相(hue)

原圖~



matrix變形矩陣原值,此值忠於原圖,不會改變原圖的色相、飽合度、明度等。



matrix變形矩陣改值例子:交換RGB三色Channel的內容,及修改其數值大小與正負,可改變 Bitmap 物件(點陣圖) 色相(hue)


991221_ColorMF_hue.swf




package  {
 import flash.display.Sprite;
 import flash.filters.ColorMatrixFilter;
 import flash.display.BitmapData;
 import flash.display.Bitmap;
 import flash.display.DisplayObject;
 //
 public class ColorMF_hue_991221 extends Sprite{
  public var bmd:BitmapData = new MyPhoto(0,0);
  public var bm:Bitmap = new Bitmap(bmd);
  public function ColorMF_hue_991221() {
   addChild(bm);
   var matrix:Array = new Array();
   matrix = matrix.concat([0, 0, 1, 0, 0]); //RED Channel
   matrix = matrix.concat([0, 1, 0, 0, 0]); //GREEN Channel
   matrix = matrix.concat([1, 0, 0, 0, 0]); //BLUE Channel
   matrix = matrix.concat([0, 0, 0, 1, 0]); //ALPHA Channel
   var myFilter:ColorMatrixFilter = new ColorMatrixFilter(matrix);
   bm.filters = [myFilter];
  }

 }
 
}

[AS3] 使用matrix顏色變形矩陣操作Bitmap物件,使其為原值,圖形RGB不變



matrix[0]、matrix[6]、matrix[12] 值皆為1時,Bitmap物件為原值,圖形不變。




package  {
 import flash.display.Sprite;
 import flash.filters.ColorMatrixFilter;
 import flash.display.BitmapData;
 import flash.display.Bitmap;
 import flash.display.DisplayObject;
 //
 public class ColorMF_identity_991221 extends Sprite{
  public var bmd:BitmapData = new MyPhoto(0,0);
  public var bm:Bitmap = new Bitmap(bmd);
  public function ColorMF_identity_991221() {
   addChild(bm);
   var matrix:Array = new Array();
   matrix = matrix.concat([1, 0, 0, 0, 0]); //RED Channel
   matrix = matrix.concat([0, 1, 0, 0, 0]); //GREEN Channel
   matrix = matrix.concat([0, 0, 1, 0, 0]); //BLUE Channel
   matrix = matrix.concat([0, 0, 0, 1, 0]); //ALPHA Channel
   var myFilter:ColorMatrixFilter = new ColorMatrixFilter(matrix);
   bm.filters = [myFilter];
  }

 }
 
}

2010年12月18日 星期六

[AS3] flash.filter.ColorMatrixFilter(matrix) - RGB到灰階

ColorMatrixFilter () 建構函式
public function ColorMatrixFilter(matrix:Array = null)
DisplayObject.filters = ColorMatrix 陣列物件
索引的陣列,其中包含目前和顯示物件相關的每個濾鏡物件。

適用於 Adobe Flash Professional CS5 的 ActionScript 3.0 參考__●flash.filters.ColorMatrixFilter類別
適用於 Adobe Flash Professional CS5 的 ActionScript 3.0 參考__●flash.filters.ColorMatrixFilter.matrix屬性
適用於 Adobe Flash Professional CS5 的 ActionScript 3.0 參考__●flash.display.DisplayObject.filters屬性

原圖:將在Flash中處理成灰階。




參考此篇處理方式:
UNDERSTANDING AS3 COLORMATRIXFILTER CLASS

991217_ColorMF_1.swf





package  {
 import flash.display.Sprite;
 import flash.display.BitmapData;
 import flash.filters.ColorMatrixFilter;
 import flash.display.Bitmap;
 import flash.display.DisplayObject;

 public class ColorMF_991217 extends Sprite{
  var photo1:BitmapData = new MyPhoto(0,0);
  var bm:Bitmap = new Bitmap(photo1);
  public function ColorMF_991217() {
   addChild(bm);
   var matrix:Array = new Array();
   matrix = matrix.concat([0.5, 0.5, 0.5, 0, 0]);
   matrix = matrix.concat([0.5, 0.5, 0.5, 0, 0]);
   matrix = matrix.concat([0.5, 0.5, 0.5, 0, 0]);
   matrix = matrix.concat([0, 0, 0, 1, 0]);
   var myFilter:ColorMatrixFilter = new ColorMatrixFilter(matrix);
   DisplayObject(bm).filters = [myFilter];
  }

 }
 
}





參考此篇處理方式:Matrix Operations for Image Processing - Paul Haeberli

991217_ColorMF_2.swf





package  {
 import flash.display.Sprite;
 import flash.display.BitmapData;
 import flash.filters.ColorMatrixFilter;
 import flash.display.Bitmap;
 import flash.display.DisplayObject;

 public class ColorMF2_991217 extends Sprite{
  var photo1:BitmapData = new MyPhoto(0,0);
  var bm:Bitmap = new Bitmap(photo1);
  public function ColorMF2_991217() {
   addChild(bm);
   //matrix 變形矩陣 - 灰階處理
   var matrix:Array = new Array();
   var rwgt:Number = 0.3086;
   var gwgt:Number = 0.6094;
   var bwgt:Number = 0.0802;
   matrix = matrix.concat([rwgt, gwgt, bwgt, 0, 0]);
   matrix = matrix.concat([rwgt, gwgt, bwgt, 0, 0]);
   matrix = matrix.concat([rwgt, gwgt, bwgt, 0, 0]);
   matrix = matrix.concat([0, 0, 0, 1, 0]);
   //ColorMatrixFilter建構式,以指定的參數 matrix 初始化新的 ColorMatrixFilter 實體。
   var myFilter:ColorMatrixFilter = new ColorMatrixFilter(matrix);
   //DisplayObject(bm).filters = [myFilter];
   //DisplayObject物件的filter屬性參照所有濾鏡組成的陣列
   bm.filters = [myFilter];
   trace(myFilter.matrix);
   trace(myFilter);
  }

 }
 
}

2010年12月16日 星期四

在BitmapData上套用Blur模糊濾鏡 - BitmapData.applyFilter()方法 + flash.filters.BlurFilter()建構函式




套用濾鏡前原圖




import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.filters.BlurFilter;

//建構元件庫中 MyPhoto1 內嵌資源類別的實體,指定給BitmapData類型的變數。
//MyPhoto1類別的基底類別為flash.display.BitmapData類別
var bmd1:BitmapData = new MyPhoto1(0,0);

//Rectangle()建構函式
//public function Rectangle(x:Number = 0, y:Number = 0, width:Number = 0, height:Number = 0)
//x 和 y 參數指定左上角座標,width 和 height 參數指定矩形寬高,以建立新的 Rectangle 物件。
//若呼叫這個函數時沒有使用參數,則會建立 x、y、width 和 height 屬性都設為 0 的矩形。

//建立矩形物件,寬高設為550,400,以符合swf檔案及bmd1點陣圖資料寬高尺寸
//這矩行物件rect將作為applyFilter()之參數
var rect:Rectangle = new Rectangle(0, 0, 550, 400);

//Point(x:Number = 0, y:Number = 0)
//建立新的點。如果沒有將 x, y 參數傳遞給這個方法,則會在 (0,0) 建立一個點。
//Point 物件代表二維座標系統中的位置,其中 x 表示水平軸,而 y 表示垂直軸。
var pt:Point = new Point(0, 0);

//宣告blurX和blurY變數及其值,將做為applyFilter()的模糊參數
var blurX:Number = 40;
var blurY:Number = 5;

//
//BlurFilter()建構函式
//public function BlurFilter(blurX:Number = 4.0, blurY:Number = 4.0, quality:int = 1)

//BitmapFilterQuality.HIGH、BitmapFilterQuality.MEDIUM、BitmapFilterQuality.LOW
var filter:BlurFilter = new BlurFilter(blurX, blurY, BitmapFilterQuality.HIGH);

//applyFilter()方法
//public function applyFilter(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, filter:BitmapFilter):void
bmd1.applyFilter(bmd1, rect, pt, filter);

//建構Bitmap物件以顯示BitmapData物件
var bm1:Bitmap = new Bitmap(bmd1);
addChild(bm1);



2010年12月13日 星期一

[AS3] BitmapData.merge()方法 - 從來源影像到目標影像的每個色版的混合

merge(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, redMultiplier:uint, greenMultiplier:uint, blueMultiplier:uint, alphaMultiplier:uint):void
執行從來源影像到目標影像的每個色版的混合。

適用於 Adobe Flash Professional CS5 的 ActionScript 3.0 參考__●flash.display.BitmapData.merge()方法


(一)

991213_BitmapData.merge_1.swf



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;


(二)

 

991213_BitmapData.merge_2.swf



import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.geom.Rectangle;
import flash.geom.Point;

//
var bmd1:BitmapData = new MyPhoto1(0, 0);
var bmd2:BitmapData = new MyPhoto2(0, 0);
//
var rect:Rectangle = new Rectangle(100, 100, 450, 300);
var pt:Point = new Point(50, 50);
var multiplier:uint = 0x80;
//
bmd1.merge(bmd2, rect, pt, 0xf0, 0xa0, 0x20, 0x30);
//
var bm1:Bitmap = new Bitmap(bmd1);
bm1.x = 0;
bm1.y = 0;
/*
var bm2:Bitmap = new Bitmap(bmd2);
bm2.x = 0;
bm2.y = 0;
*/
//
addChild(bm1);
//addChild(bm2);

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

2010年12月11日 星期六

[AS3] BitmapData.copyChannel()方法(一) - 挑選自身或其它BitmapData物件的某色版,傳送到目標色版

copyChannel()方法
public function copyChannel(sourceBitmapData:BitmapData, sourceRect:Rectangle, destPoint:Point, sourceChannel:uint, destChannel:uint):void


991211_BitmapData.copyChannel_1.swf - 未使用copyChannel()方法,載入991211_photo_1.jpg圖檔




import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.display.BitmapData;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.geom.Rectangle;
import flash.geom.Point;
import flash.display.Bitmap;

//
const bmURL:String = "991211_photo_1.jpg";
var ldr:Loader = new Loader();
ldr.load(new URLRequest(bmURL));
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderComplete);
ldr.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);

//
var bmData1:BitmapData;
//var bmData2:BitmapData;
var bm1:Bitmap;
//var bm2:Bitmap;
//
var format:TextFormat = new TextFormat();
with(format){
 color = 0xff00ff;
 size = 88;
 font = "Lucida Fax";
 bold = true;
 align = "center";
}
//
var tF:TextField = new TextField;
with(tF){
 x = 0;
 y = 150;
 width = 550;
 //autoSize = TextFieldAutoSize.LEFT;
}
tF.defaultTextFormat = format;
addChild(tF);

//
function onProgress(e:ProgressEvent):void{
 tF.text = String(Math.floor((e.bytesLoaded/e.bytesTotal*100)));
}

//
var rect:Rectangle = new Rectangle(0,0, 550, 400);
var point:Point = new Point(0, 0);
//
function onLoaderComplete(e:Event):void{
 gogo();
}
//
function gogo(){
 bmData1 = (ldr.content as Bitmap).bitmapData;
 //bmData1.copyChannel(bmData1, rect, point, BitmapDataChannel.BLUE, BitmapDataChannel.RED);
 bm1 = new Bitmap(bmData1);
 addChild(bm1);
}




991211_BitmapData.copyChannel_1a.swf - 使用copyChannel()方法,載入991211_photo_1.jpg圖檔
→ copyChannel(bmData1, rect, point, BitmapDataChannel.BLUE, BitmapDataChannel.RED);




import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.display.BitmapData;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.geom.Rectangle;
import flash.geom.Point;
import flash.display.Bitmap;

//
const bmURL:String = "991211_photo_1.jpg";
var ldr:Loader = new Loader();
ldr.load(new URLRequest(bmURL));
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderComplete);
ldr.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);

//
var bmData1:BitmapData;
var bmData2:BitmapData;
var bm1:Bitmap;
var bm2:Bitmap;
//
var format:TextFormat = new TextFormat();
with(format){
 color = 0xff00ff;
 size = 88;
 font = "Lucida Fax";
 bold = true;
 align = "center";
}
//
var tF:TextField = new TextField;
with(tF){
 x = 0;
 y = 150;
 width = 550;
 //autoSize = TextFieldAutoSize.LEFT;
}
tF.defaultTextFormat = format;
addChild(tF);

//
function onProgress(e:ProgressEvent):void{
 tF.text = String(Math.floor((e.bytesLoaded/e.bytesTotal*100)));
}

//
var rect:Rectangle = new Rectangle(0,0, 550, 400);
var point:Point = new Point(0, 0);
//
function onLoaderComplete(e:Event):void{
 gogo();
}
//
function gogo(){
 bmData1 = (ldr.content as Bitmap).bitmapData;
 bmData1.copyChannel(bmData1, rect, point, BitmapDataChannel.BLUE, BitmapDataChannel.RED);
 bm1 = new Bitmap(bmData1);
 addChild(bm1);
}




991211_BitmapData.copyChannel_1b.swf - 使用copyChannel()方法,載入991211_photo_1.jpg圖檔
→ bmData1.copyChannel(bmData1, rect, point, BitmapDataChannel.RED, BitmapDataChannel.BLUE);




import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.display.BitmapData;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.geom.Rectangle;
import flash.geom.Point;
import flash.display.Bitmap;

//
const bmURL:String = "991211_photo_1.jpg";
var ldr:Loader = new Loader();
ldr.load(new URLRequest(bmURL));
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderComplete);
ldr.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);

//
var bmData1:BitmapData;
var bmData2:BitmapData;
var bm1:Bitmap;
var bm2:Bitmap;
//
var format:TextFormat = new TextFormat();
with(format){
 color = 0xff00ff;
 size = 88;
 font = "Lucida Fax";
 bold = true;
 align = "center";
}
//
var tF:TextField = new TextField;
with(tF){
 x = 0;
 y = 150;
 width = 550;
 //autoSize = TextFieldAutoSize.LEFT;
}
tF.defaultTextFormat = format;
addChild(tF);

//
function onProgress(e:ProgressEvent):void{
 tF.text = String(Math.floor((e.bytesLoaded/e.bytesTotal*100)));
}

//
var rect:Rectangle = new Rectangle(0,0, 600, 450);
var point:Point = new Point(-50, -50);
//
function onLoaderComplete(e:Event):void{
 gogo();
}
//
function gogo(){
 bmData1 = (ldr.content as Bitmap).bitmapData;
 bmData1.copyChannel(bmData1, rect, point, BitmapDataChannel.RED, BitmapDataChannel.BLUE);
 bm1 = new Bitmap(bmData1);
 addChild(bm1);
}




● 參閱適用於 Adobe Flash Professional CS5 的 ActionScript 3.0 參考 - Flash Help關於BitmapData.copyChannel()的資訊

2010年12月10日 星期五

[AS3] 由Bitmap類別實體的bitmapData屬性參照BitmapData物件,以其fillRect()方法在點陣像素上繪製矩形填色

BitmapData()建構函式
public function BitmapData(width:int, height:int, transparent:Boolean = true, fillColor:uint = 0xFFFFFFFF)
BitmapData.fillRect()方法public function fillRect(rect:Rectangle, color:uint):void
Rectangle()建構函式
public function Rectangle(x:Number = 0, y:Number = 0, width:Number = 0, height:Number = 0)


991210_BitmapData_fillRect_1.swf



//
import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.geom.Rectangle;

//
//BitmapData()建構函式
//public function BitmapData(width:int, height:int, transparent:Boolean = true, fillColor:uint = 0xFFFFFFFF)
var bmpData:BitmapData = new BitmapData(420, 320, true, 0xff6600ff);
var bitmap:Bitmap = new Bitmap(bmpData);
bitmap.x = 50;
bitmap.y = 50;
addChild(bitmap);

//
//Rectangle()建構函式
//public function Rectangle(x:Number = 0, y:Number = 0, width:Number = 0, height:Number = 0)
var rect1:Rectangle = new Rectangle(50, 120 ,20, 20);
for(var i:int=0; i<7; i++){
 //fillRect()方法  
 //public function fillRect(rect:Rectangle, color:uint):void
 //由Bitmap類別實體的bitmapData屬性參照BitmapData物件,
 //以其fillRect()方法在點陣像素上繪製矩形填色
 bitmap.bitmapData.fillRect(rect1, 0xffffffff);
 rect1.x += 20;
 rect1.y += 20;
}
//
var rect2:Rectangle = new Rectangle(170, 240 ,20, 20);
for(var j:int=0; j<12; j++){
 bitmap.bitmapData.fillRect(rect2, 0xffffffff);
 rect2.x += 20;
 rect2.y -= 20;
}