ColorMatrixFilter Test

by yoneken
色々あっていいじゃない Googleだもの
Matrixの係数には、小数や負数も入れられます
5ivestar様のProxyを利用させて頂きました。   
詳細 => http://5ivestar.org/blog/2008/12/wonderfl-webproxy/     
♥0 | Line 121 | Modified 2009-05-13 19:09:33 | MIT License
play

ActionScript3 source code

/**
 * Copyright yoneken ( http://wonderfl.net/user/yoneken )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/jdE1
 */

// 色々あっていいじゃない Googleだもの
// Matrixの係数には、小数や負数も入れられます
//
// 5ivestar様のProxyを利用させて頂きました。   
// 詳細 => http://5ivestar.org/blog/2008/12/wonderfl-webproxy/     

package {
  [SWF(width="400", height="400")]
  import flash.display.Sprite;
  import flash.events.Event;
  import flash.display.Loader;
  import flash.net.URLRequest;
  import flash.system.Security;
  import flash.events.Event;
  import flash.display.Bitmap;
  import flash.display.BitmapData;
  import flash.filters.ColorMatrixFilter;
  import flash.geom.Rectangle;
  import flash.geom.Point;
  import flash.utils.Timer;
  import flash.events.TimerEvent;

  public class GoogleMatrix extends Sprite   
  {
    private var img:Loader;
    private var t:Timer;
    public function GoogleMatrix()
    {
      super();
      Security.loadPolicyFile("http://5ivestar.org/proxy/crossdomain.xml");
      img = new Loader();
      img.contentLoaderInfo.addEventListener("complete", imgLoaded);  
      t = new Timer(1000, 1);
      t.addEventListener(TimerEvent.TIMER, function():void{
        img.load(new URLRequest("http://5ivestar.org/proxy/http://www.google.com/logos/Logo_60wht.gif"));  
      });
      t.start();
    }

    private function imgLoaded(e:Event):void
    {
      [ArrayElementType("BitmapData")] var a:Array = new Array(10);
      a[0] = new BitmapData(img.width, img.height, true, 0x00000000);
      a[0].draw(img);
      addChild(new Bitmap(a[0]));

      for(var i:int=1;i<10;i++)
      {
        a[i] = new BitmapData(img.width, img.height);
        var cmf:ColorMatrixFilter;
        switch(i)
        {
          case 1:
            // b<=>g
            cmf = new ColorMatrixFilter([
                    1,0,0,0,0,
                    0,0,1,0,0,
                    0,1,0,0,0,
                    0,0,0,1,0]);
            break;
          case 2:
            // r<=>b
            cmf = new ColorMatrixFilter([
                    0,0,1,0,0,
                    0,1,0,0,0,
                    1,0,0,0,0,
                    0,0,0,1,0]);
            break;
          case 3:
            // r<=r, g<=g, b<=r
            cmf = new ColorMatrixFilter([
                    1,0,0,0,0,
                    0,1,0,0,0,
                    1,0,0,0,0,
                    0,0,0,1,0]);
            break;
          case 4:
            // r<=r, g<=g, b<=g
            cmf = new ColorMatrixFilter([
                    1,0,0,0,0,
                    0,1,0,0,0,
                    0,1,0,0,0,
                    0,0,0,1,0]);
            break;
          case 5:
            // r<=r, g<=r, b<=r
            cmf = new ColorMatrixFilter([
                    1,0,0,0,0,
                    1,0,0,0,0,
                    1,0,0,0,0,
                    0,0,0,1,0]);
            break;
          case 6:
            // グレースケール
            cmf = new ColorMatrixFilter([
                    0.3, 0.3, 0.3,   0,   0,
                    0.3, 0.3, 0.3,   0,   0,
                    0.3, 0.3, 0.3,   0,   0,
                      0,   0,   0,   1,   0]);
            break;
          case 7:
            // ネガポジ反転
            cmf = new ColorMatrixFilter([
                     -1,   0,   0,   1,   0,
                      0,  -1,   0,   1,   0,
                      0,   0,  -1,   1,   0,
                      0,   0,   0,   1,   0]);
            break;
          case 8:
            // 夕方(全体的に赤をかける)
            cmf = new ColorMatrixFilter([
                    0.5,   0,   0, 0.5,  0,
                      0,   1,   0,   0,  0,
                      0,   0,   1,   0,  0,
                      0,   0,   0,   1,  0]);
            break;
          case 9:
            // 半透明
            cmf = new ColorMatrixFilter([
                      1,   0,   0,   0,   0,
                      0,   1,   0,   0,   0,
                      0,   0,   1,   0,   0,
                      0,   0,   0, 0.5,   0]);
            break;
        }
        a[i].applyFilter(a[0], new Rectangle(0, 0, img.width, img.height), new Point(0, 0), cmf);
        var b:Bitmap = new Bitmap(a[i]);
        if(i<5){
          b.y = img.height*i;
        }else{
          b.x = img.width;
          b.y = img.height*(i-5);
        }
        addChild(b);
      }
      Wonderfl.capture_delay( 2 );
    }
  }
}