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

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

 }
 
}