※現在、「wonderfl build flash online」求人コンテンツ制作に関してのアンケートを実施中です!みなさまのお力添えを頂いて、続々とアンケート結果が集まっていますが、まだまだ募集しております。ご協力のほど、どうぞよろしくお願いいたします!

wonderfl運営事務局
→アンケートページ(※ログインしてからお答えいただけるようになっています。)

 notice: Flash editor updated! Join the development! Thanks to MiniBuilder


FAVORITE BY
:
EffectWoah!
:
:
:
:
:
BitmapDatacoloreffectRGB色分解するデモ
:
could be a nice transition effect?
:
:
:
sssqss
:
:
:
:
かっこいい!
:
RGB Separator
:
copyChannel
:
:
くーる!!
:
BitmapDataなにこれ超かっこいい
:
bitmapdatabitmapdata
:
:
:
色分解
:
effectCool color effect (transition)
:
:
RGBRGBへ分解
:
:
BitmapDataRGB色分解
:
RGB
:
wonderful visualization!
:
:
BitmapDataRGBSeparaterドラッグして分かるすごさ
:
RGBRGB
:
:
bitmapアイデアが凄くいい!
:
:
色分解
:
bitmapdatargb色分解
:
BitmapDatawonderfl
:
bitmapやばい!
:
この手があったか
:
rgbかこいいーー
:
色分解、ずれるとかっこいい
:
RGB Separator
:
色分解と3D表示
:
色分解すげぇかっこいい
:
RGB
:
勉強します
:
うおおっ!
:
かっこえー
:
色分解も勉強しなければと思います
FORKED
  1. // forked from clockmaker's RGB Separater
  2. package 
  3. {
  4.   import flash.display.*;
  5.   import flash.events.*;
  6.   import flash.geom.*;
  7.   import flash.net.*;
  8.   import flash.system.LoaderContext;
  9.   
  10.   [SWF(backgroundColor="0x808080", frameRate="60", width="465", height="465")]
  11.   
  12.   /**
  13.    * RGB色分解するデモ
  14.    * マウスでステージをドラッグしてみてね
  15.    */
  16.   public class Main extends Sprite 
  17.   {
  18.     /**
  19.      * スピードの値
  20.      */
  21.     static private const CAMERA_SPEED:Number = .1;
  22.     
  23.     /**
  24.      * 画像のパス
  25.      * FlickrのピクチャでもOK!
  26.      */
  27.     static private const IMAGE_URL:String = "http://farm5.static.flickr.com/4062/4323574656_c7141fee7b_b.jpg"
  28.     //static private const IMAGE_URL:String = "http://farm1.static.flickr.com/50/146026358_13c698d683_m.jpg"
  29.     
  30.     /**
  31.      * コンストラクター
  32.      */
  33.     public function Main()
  34.     {
  35.       var perspectiveProjection:PerspectiveProjection = root.transform.perspectiveProjection;
  36.       perspectiveProjection.focalLength = 10000;
  37.       
  38.       // LoaderContextを準備(クロスドメインを使用するため)
  39.       var context:LoaderContext = new LoaderContext(true);
  40.       
  41.       // 外部画像読み込み
  42.       loader = new Loader();
  43.       loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadHandler);
  44.       loader.load(new URLRequest(IMAGE_URL), context);
  45.       
  46.       // and bg
  47.       var bgMatrix:Matrix = new Matrix();
  48.       bgMatrix.rotate(90 * Math.PI / 180);
  49.       graphics.beginGradientFill("linear", [0xFFFFFF, 0x001122], [100100], [0255], bgMatrix);
  50.       graphics.drawRect(00, stage.stageWidth, stage.stageHeight);
  51.     }
  52.     
  53.     /**
  54.      * 画像の読み込み完了時の処理
  55.      */
  56.     private function loadHandler(e:Event):void
  57.     {
  58.       // イベントを設定
  59.       stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
  60.       stage.addEventListener(MouseEvent.MOUSE_UP, mouseUp);
  61.       addEventListener(Event.ENTER_FRAME, onEnterFrame);
  62.       
  63.       // RGBチャンネルに分解する
  64.       var vec:Array = createRGBChannel(loader.content as Bitmap);
  65.        
  66.       // 3Dオブジェクトをいれるラッパーを作成
  67.       main = Sprite(addChild(new Sprite()));
  68.       wrap = Sprite(main.addChild(new Sprite()));
  69.       wrap.x = stage.stageWidth / 2;
  70.       wrap.y = stage.stageHeight / 2;
  71.       
  72.       //Add some reference objects
  73.       for (var i:int = 0; i < vec.length; i++)
  74.       {
  75.         var obj:DisplayObject = wrap.addChild(new Bitmap(vec[i]));
  76.         obj.x = - obj.width / 2;
  77.         obj.y = - obj.height / 2;
  78.         obj.z = - 50 * (i - vec.length / 2);
  79.         
  80.         if (i == 0continue;
  81.         obj.blendMode = BlendMode.SCREEN;
  82.       }
  83.     }
  84.     
  85.     /**
  86.      * Seperate RGB Channel
  87.      * @param  Bitmap
  88.      * @return  RGB + Black Vector.<BitmapData>
  89.      */
  90.     private function createRGBChannel(bmp:Bitmap):Array
  91.     {
  92.       var b:BitmapData = new BitmapData(bmp.width, bmp.height, true, 0xFF000000);
  93.       var r:BitmapData = new BitmapData(bmp.width, bmp.height, true, 0xFF000000);
  94.       var g:BitmapData = new BitmapData(bmp.width, bmp.height, true, 0xFF000000);
  95.       b.copyChannel(bmp.bitmapData, new Rectangle(00, bmp.width, bmp.height), new Point(), BitmapDataChannel.BLUE, BitmapDataChannel.BLUE);
  96.       r.copyChannel(bmp.bitmapData, new Rectangle(00, bmp.width, bmp.height), new Point(), BitmapDataChannel.RED, BitmapDataChannel.RED);
  97.       g.copyChannel(bmp.bitmapData, new Rectangle(00, bmp.width, bmp.height), new Point(), BitmapDataChannel.GREEN, BitmapDataChannel.GREEN);
  98.       
  99.       return [new BitmapData(bmp.width, bmp.height, true, 0xFF000000), r, g, b];
  100.     }
  101.     
  102.     /**
  103.      * Eneter Frameの処理
  104.      */
  105.     private function onEnterFrame(e:Event):void
  106.     {
  107.       if (move)
  108.       {
  109.         panAngle += ((mouseX - lastMouseX) / stage.stageWidth * 180 + lastPanAngle - panAngle) * CAMERA_SPEED;
  110.         tiltAngle += ((mouseY - lastMouseY) / stage.stageHeight * 180 + lastTiltAngle - tiltAngle) * CAMERA_SPEED;
  111.       }
  112.       else
  113.       {
  114.         panAngle += (0 - panAngle) * CAMERA_SPEED;
  115.         tiltAngle += (0 - tiltAngle) * CAMERA_SPEED;
  116.       }
  117.       wrap.rotationX = tiltAngle;
  118.       wrap.rotationY = panAngle;
  119.       
  120.       // 以下 Zソート
  121.       var arr:Array = []
  122.       for (var i:int = 0; i < wrap.numChildren; i++)
  123.       {
  124.         var ele:DisplayObject = wrap.getChildAt(i);
  125.         var mtx:Matrix3D = ele.transform.getRelativeMatrix3D(main);
  126.         arr.push( { ele:ele, z:mtx.position.z } );
  127.       }
  128.       arr.sortOn("z"Array.NUMERIC | Array.DESCENDING);
  129.       var baseZ:Number = wrap.z;
  130.       for (i = 0; i < arr.length; i++)
  131.       {
  132.         ele = arr[i].ele;
  133.         var z:Number = arr[i].z;
  134.         wrap.setChildIndex(ele, i);
  135.       }
  136.     }
  137.     
  138.     /**
  139.      * マウスを押したときの処理
  140.      */
  141.     private function mouseDown(event:MouseEvent):void
  142.     {
  143.       lastPanAngle = panAngle;
  144.       lastTiltAngle = tiltAngle;
  145.       lastMouseX = mouseX;
  146.       lastMouseY = mouseY;
  147.       move = true;
  148.     }
  149.     
  150.     /**
  151.      * マウスを話したときの処理
  152.      */
  153.     private function mouseUp(event:MouseEvent):void
  154.     {
  155.       move = false;
  156.     }
  157.     
  158.     // ------------------------------------------
  159.     // いろいろ変数
  160.     // ------------------------------------------
  161.     private var move:Boolean = false;
  162.     private var lastMouseX:Number;
  163.     private var lastMouseY:Number;
  164.     private var lastPanAngle:Number;
  165.     private var lastTiltAngle:Number;
  166.     private var panAngle:Number = 0;
  167.     private var tiltAngle:Number = 0;
  168.     
  169.     private var main:Sprite;
  170.     private var wrap:Sprite;
  171.     private var loader:Loader;
  172.   }
  173.   
  174. }
noswf
  1. // forked from clockmaker's RGB Separater
  2. package 
  3. {
  4.   import flash.display.*;
  5.   import flash.events.*;
  6.   import flash.geom.*;
  7.   import flash.net.*;
  8.   import flash.system.LoaderContext;
  9.   
  10.   [SWF(backgroundColor="0x808080", frameRate="60", width="465", height="465")]
  11.   
  12.   /**
  13.    * RGB色分解するデモ
  14.    * マウスでステージをドラッグしてみてね
  15.    */
  16.   public class Main extends Sprite 
  17.   {
  18.     /**
  19.      * スピードの値
  20.      */
  21.     static private const CAMERA_SPEED:Number = .1;
  22.     
  23.     /**
  24.      * 画像のパス
  25.      * FlickrのピクチャでもOK!
  26.      */
  27.     static private const IMAGE_URL:String = "http://clockmaker.jp/imgs/mooning-light_300x300.jpg"
  28.     //static private const IMAGE_URL:String = "http://farm1.static.flickr.com/50/146026358_13c698d683_m.jpg"
  29.     
  30.     /**
  31.      * コンストラクター
  32.      */
  33.     public function Main()
  34.     {
  35.       var perspectiveProjection:PerspectiveProjection = root.transform.perspectiveProjection;
  36.       perspectiveProjection.focalLength = 10000;
  37.       
  38.       // LoaderContextを準備(クロスドメインを使用するため)
  39.       var context:LoaderContext = new LoaderContext(true);
  40.       
  41.       // 外部画像読み込み
  42.       loader = new Loader();
  43.       loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadHandler);
  44.       loader.load(new URLRequest(IMAGE_URL), context);
  45.       
  46.       // and bg
  47.       var bgMatrix:Matrix = new Matrix();
  48.       bgMatrix.rotate(90 * Math.PI / 180);
  49.       graphics.beginGradientFill("linear", [0xFFFFFF, 0x001122], [100100], [0255], bgMatrix);
  50.       graphics.drawRect(00, stage.stageWidth, stage.stageHeight);
  51.     }
  52.     
  53.     /**
  54.      * 画像の読み込み完了時の処理
  55.      */
  56.     private function loadHandler(e:Event):void
  57.     {
  58.       // イベントを設定
  59.       stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
  60.       stage.addEventListener(MouseEvent.MOUSE_UP, mouseUp);
  61.       addEventListener(Event.ENTER_FRAME, onEnterFrame);
  62.       
  63.       // RGBチャンネルに分解する
  64.       var vec:Array = createRGBChannel(loader.content as Bitmap);
  65.        
  66.       // 3Dオブジェクトをいれるラッパーを作成
  67.       main = Sprite(addChild(new Sprite()));
  68.       wrap = Sprite(main.addChild(new Sprite()));
  69.       wrap.x = stage.stageWidth / 2;
  70.       wrap.y = stage.stageHeight / 2;
  71.       
  72.       //Add some reference objects
  73.       for (var i:int = 0; i < vec.length; i++)
  74.       {
  75.         var obj:DisplayObject = wrap.addChild(new Bitmap(vec[i]));
  76.         obj.x = - obj.width / 2;
  77.         obj.y = - obj.height / 2;
  78.         obj.z = - 50 * (i - vec.length / 2);
  79.         
  80.         if (i == 0continue;
  81.         obj.blendMode = BlendMode.SCREEN;
  82.       }
  83.     }
  84.     
  85.     /**
  86.      * Seperate RGB Channel
  87.      * @param  Bitmap
  88.      * @return  RGB + Black Vector.<BitmapData>
  89.      */
  90.     private function createRGBChannel(bmp:Bitmap):Array
  91.     {
  92.       var b:BitmapData = new BitmapData(bmp.width, bmp.height, true, 0xFF000000);
  93.       var r:BitmapData = new BitmapData(bmp.width, bmp.height, true, 0xFF000000);
  94.       var g:BitmapData = new BitmapData(bmp.width, bmp.height, true, 0xFF000000);
  95.       b.copyChannel(bmp.bitmapData, new Rectangle(00, bmp.width, bmp.height), new Point(), BitmapDataChannel.BLUE, BitmapDataChannel.BLUE);
  96.       r.copyChannel(bmp.bitmapData, new Rectangle(00, bmp.width, bmp.height), new Point(), BitmapDataChannel.RED, BitmapDataChannel.RED);
  97.       g.copyChannel(bmp.bitmapData, new Rectangle(00, bmp.width, bmp.height), new Point(), BitmapDataChannel.GREEN, BitmapDataChannel.GREEN);
  98.       
  99.       return [new BitmapData(bmp.width, bmp.height, true, 0xFF000000), r, g, b];
  100.     }
  101.     
  102.     /**
  103.      * Eneter Frameの処理
  104.      */
  105.     private function onEnterFrame(e:Event):void
  106.     {
  107.       if (move)
  108.       {
  109.         panAngle += ((mouseX - lastMouseX) / stage.stageWidth * 180 + lastPanAngle - panAngle) * CAMERA_SPEED;
  110.         tiltAngle += ((mouseY - lastMouseY) / stage.stageHeight * 180 + lastTiltAngle - tiltAngle) * CAMERA_SPEED;
  111.       }
  112.       else
  113.       {
  114.         panAngle += (0 - panAngle) * CAMERA_SPEED;
  115.         tiltAngle += (0 - tiltAngle) * CAMERA_SPEED;
  116.       }
  117.       wrap.rotationX = tiltAngle;
  118.       wrap.rotationY = panAngle;
  119.       
  120.       // 以下 Zソート
  121.       var arr:Array = []
  122.       for (var i:int = 0; i < wrap.numChildren; i++)
  123.       {
  124.         var ele:DisplayObject = wrap.getChildAt(i);
  125.         var mtx:Matrix3D = ele.transform.getRelativeMatrix3D(main);
  126.         arr.push( { ele:ele, z:mtx.position.z } );
  127.       }
  128.       arr.sortOn("z"Array.NUMERIC | Array.DESCENDING);
  129.       var baseZ:Number = wrap.z;
  130.       for (i = 0; i < arr.length; i++)
  131.       {
  132.         ele = arr[i].ele;
  133.         var z:Number = arr[i].z;
  134.         wrap.setChildIndex(ele, i);
  135.       }
  136.     }
  137.     
  138.     /**
  139.      * マウスを押したときの処理
  140.      */
  141.     private function mouseDown(event:MouseEvent):void
  142.     {
  143.       lastPanAngle = panAngle;
  144.       lastTiltAngle = tiltAngle;
  145.       lastMouseX = mouseX;
  146.       lastMouseY = mouseY;
  147.       move = true;
  148.     }
  149.     
  150.     /**
  151.      * マウスを話したときの処理
  152.      */
  153.     private function mouseUp(event:MouseEvent):void
  154.     {
  155.       move = false;
  156.     }
  157.     
  158.     // ------------------------------------------
  159.     // いろいろ変数
  160.     // ------------------------------------------
  161.     private var move:Boolean = false;
  162.     private var lastMouseX:Number;
  163.     private var lastMouseY:Number;
  164.     private var lastPanAngle:Number;
  165.     private var lastTiltAngle:Number;
  166.     private var panAngle:Number = 0;
  167.     private var tiltAngle:Number = 0;
  168.     
  169.     private var main:Sprite;
  170.     private var wrap:Sprite;
  171.     private var loader:Loader;
  172.   }
  173.   
  174. }
noswf
  1. // forked from clockmaker's RGB Separater
  2. package 
  3. {
  4.   import flash.display.*;
  5.   import flash.events.*;
  6.   import flash.geom.*;
  7.   import flash.net.*;
  8.   import flash.system.LoaderContext;
  9.   
  10.   [SWF(backgroundColor="0x808080", frameRate="60", width="465", height="465")]
  11.   
  12.   /**
  13.    * RGB色分解するデモ
  14.    * マウスでステージをドラッグしてみてね
  15.    */
  16.   public class Main extends Sprite 
  17.   {
  18.     /**
  19.      * スピードの値
  20.      */
  21.     static private const CAMERA_SPEED:Number = .1;
  22.     
  23.     /**
  24.      * 画像のパス
  25.      * FlickrのピクチャでもOK!
  26.      */
  27.     static private const IMAGE_URL:String = "http://clockmaker.jp/imgs/mooning-light_300x300.jpg"
  28.     //static private const IMAGE_URL:String = "http://farm1.static.flickr.com/50/146026358_13c698d683_m.jpg"
  29.     
  30.     /**
  31.      * コンストラクター
  32.      */
  33.     public function Main()
  34.     {
  35.       var perspectiveProjection:PerspectiveProjection = root.transform.perspectiveProjection;
  36.       perspectiveProjection.focalLength = 10000;
  37.       
  38.       // LoaderContextを準備(クロスドメインを使用するため)
  39.       var context:LoaderContext = new LoaderContext(true);
  40.       
  41.       // 外部画像読み込み
  42.       loader = new Loader();
  43.       loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadHandler);
  44.       loader.load(new URLRequest(IMAGE_URL), context);
  45.       
  46.       // and bg
  47.       var bgMatrix:Matrix = new Matrix();
  48.       bgMatrix.rotate(90 * Math.PI / 180);
  49.       graphics.beginGradientFill("linear", [0xFFFFFF, 0x001122], [100100], [0255], bgMatrix);
  50.       graphics.drawRect(00, stage.stageWidth, stage.stageHeight);
  51.     }
  52.     
  53.     /**
  54.      * 画像の読み込み完了時の処理
  55.      */
  56.     private function loadHandler(e:Event):void
  57.     {
  58.       // イベントを設定
  59.       stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
  60.       stage.addEventListener(MouseEvent.MOUSE_UP, mouseUp);
  61.       addEventListener(Event.ENTER_FRAME, onEnterFrame);
  62.       
  63.       // RGBチャンネルに分解する
  64.       var vec:Array = createRGBChannel(loader.content as Bitmap);
  65.        
  66.       // 3Dオブジェクトをいれるラッパーを作成
  67.       main = Sprite(addChild(new Sprite()));
  68.       wrap = Sprite(main.addChild(new Sprite()));
  69.       wrap.x = stage.stageWidth / 2;
  70.       wrap.y = stage.stageHeight / 2;
  71.       
  72.       //Add some reference objects
  73.       for (var i:int = 0; i < vec.length; i++)
  74.       {
  75.         var obj:DisplayObject = wrap.addChild(new Bitmap(vec[i]));
  76.         obj.x = - obj.width / 2;
  77.         obj.y = - obj.height / 2;
  78.         obj.z = - 50 * (i - vec.length / 2);
  79.         
  80.         if (i == 0continue;
  81.         obj.blendMode = BlendMode.SCREEN;
  82.       }
  83.     }
  84.     
  85.     /**
  86.      * Seperate RGB Channel
  87.      * @param  Bitmap
  88.      * @return  RGB + Black Vector.<BitmapData>
  89.      */
  90.     private function createRGBChannel(bmp:Bitmap):Array
  91.     {
  92.       var b:BitmapData = new BitmapData(bmp.width, bmp.height, true, 0xFF000000);
  93.       var r:BitmapData = new BitmapData(bmp.width, bmp.height, true, 0xFF000000);
  94.       var g:BitmapData = new BitmapData(bmp.width, bmp.height, true, 0xFF000000);
  95.       b.copyChannel(bmp.bitmapData, new Rectangle(00, bmp.width, bmp.height), new Point(), BitmapDataChannel.BLUE, BitmapDataChannel.BLUE);
  96.       r.copyChannel(bmp.bitmapData, new Rectangle(00, bmp.width, bmp.height), new Point(), BitmapDataChannel.RED, BitmapDataChannel.RED);
  97.       g.copyChannel(bmp.bitmapData, new Rectangle(00, bmp.width, bmp.height), new Point(), BitmapDataChannel.GREEN, BitmapDataChannel.GREEN);
  98.       
  99.       return [new BitmapData(bmp.width, bmp.height, true, 0xFF000000), r, g, b];
  100.     }
  101.     
  102.     /**
  103.      * Eneter Frameの処理
  104.      */
  105.     private function onEnterFrame(e:Event):void
  106.     {
  107.       if (move)
  108.       {
  109.         panAngle += ((mouseX - lastMouseX) / stage.stageWidth * 180 + lastPanAngle - panAngle) * CAMERA_SPEED;
  110.         tiltAngle += ((mouseY - lastMouseY) / stage.stageHeight * 180 + lastTiltAngle - tiltAngle) * CAMERA_SPEED;
  111.       }
  112.       else
  113.       {
  114.         panAngle += (0 - panAngle) * CAMERA_SPEED;
  115.         tiltAngle += (0 - tiltAngle) * CAMERA_SPEED;
  116.       }
  117.       wrap.rotationX = tiltAngle;
  118.       wrap.rotationY = panAngle;
  119.       
  120.       // 以下 Zソート
  121.       var arr:Array = []
  122.       for (var i:int = 0; i < wrap.numChildren; i++)
  123.       {
  124.         var ele:DisplayObject = wrap.getChildAt(i);
  125.         var mtx:Matrix3D = ele.transform.getRelativeMatrix3D(main);
  126.         arr.push( { ele:ele, z:mtx.position.z } );
  127.       }
  128.       arr.sortOn("z"Array.NUMERIC | Array.DESCENDING);
  129.       var baseZ:Number = wrap.z;
  130.       for (i = 0; i < arr.length; i++)
  131.       {
  132.         ele = arr[i].ele;
  133.         var z:Number = arr[i].z;
  134.         wrap.setChildIndex(ele, i);
  135.       }
  136.     }
  137.     
  138.     /**
  139.      * マウスを押したときの処理
  140.      */
  141.     private function mouseDown(event:MouseEvent):void
  142.     {
  143.       lastPanAngle = panAngle;
  144.       lastTiltAngle = tiltAngle;
  145.       lastMouseX = mouseX;
  146.       lastMouseY = mouseY;
  147.       move = true;
  148.     }
  149.     
  150.     /**
  151.      * マウスを話したときの処理
  152.      */
  153.     private function mouseUp(event:MouseEvent):void
  154.     {
  155.       move = false;
  156.     }
  157.     
  158.     // ------------------------------------------
  159.     // いろいろ変数
  160.     // ------------------------------------------
  161.     private var move:Boolean = false;
  162.     private var lastMouseX:Number;
  163.     private var lastMouseY:Number;
  164.     private var lastPanAngle:Number;
  165.     private var lastTiltAngle:Number;
  166.     private var panAngle:Number = 0;
  167.     private var tiltAngle:Number = 0;
  168.     
  169.     private var main:Sprite;
  170.     private var wrap:Sprite;
  171.     private var loader:Loader;
  172.   }
  173.   
  174. }
noswf
  1. // forked from clockmaker's RGB Separater
  2. package 
  3. {
  4.   import flash.display.*;
  5.   import flash.events.*;
  6.   import flash.geom.*;
  7.   import flash.net.*;
  8.   import flash.system.LoaderContext;
  9.   
  10.   [SWF(backgroundColor="0x808080", frameRate="60", width="465", height="465")]
  11.   
  12.   /**
  13.    * RGB色分解するデモ
  14.    * マウスでステージをドラッグしてみてね
  15.    */
  16.   public class Main extends Sprite 
  17.   {
  18.     /**
  19.      * スピードの値
  20.      */
  21.     static private const CAMERA_SPEED:Number = .1;
  22.     
  23.     /**
  24.      * 画像のパス
  25.      * FlickrのピクチャでもOK!
  26.      */
  27.     static private const IMAGE_URL:String = "http://clockmaker.jp/imgs/mooning-light_300x300.jpg"
  28.     //static private const IMAGE_URL:String = "http://farm1.static.flickr.com/50/146026358_13c698d683_m.jpg"
  29.     
  30.     /**
  31.      * コンストラクター
  32.      */
  33.     public function Main()
  34.     {
  35.       var perspectiveProjection:PerspectiveProjection = root.transform.perspectiveProjection;
  36.       perspectiveProjection.focalLength = 10000;
  37.       
  38.       // LoaderContextを準備(クロスドメインを使用するため)
  39.       var context:LoaderContext = new LoaderContext(true);
  40.       
  41.       // 外部画像読み込み
  42.       loader = new Loader();
  43.       loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadHandler);
  44.       loader.load(new URLRequest(IMAGE_URL), context);
  45.       
  46.       // and bg
  47.       var bgMatrix:Matrix = new Matrix();
  48.       bgMatrix.rotate(90 * Math.PI / 180);
  49.       graphics.beginGradientFill("linear", [0xFFFFFF, 0x001122], [100100], [0255], bgMatrix);
  50.       graphics.drawRect(00, stage.stageWidth, stage.stageHeight);
  51.     }
  52.     
  53.     /**
  54.      * 画像の読み込み完了時の処理
  55.      */
  56.     private function loadHandler(e:Event):void
  57.     {
  58.       // イベントを設定
  59.       stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
  60.       stage.addEventListener(MouseEvent.MOUSE_UP, mouseUp);
  61.       addEventListener(Event.ENTER_FRAME, onEnterFrame);
  62.       
  63.       // RGBチャンネルに分解する
  64.       var vec:Array = createRGBChannel(loader.content as Bitmap);
  65.        
  66.       // 3Dオブジェクトをいれるラッパーを作成
  67.       main = Sprite(addChild(new Sprite()));
  68.       wrap = Sprite(main.addChild(new Sprite()));
  69.       wrap.x = stage.stageWidth / 2;
  70.       wrap.y = stage.stageHeight / 2;
  71.       
  72.       //Add some reference objects
  73.       for (var i:int = 0; i < vec.length; i++)
  74.       {
  75.         var obj:DisplayObject = wrap.addChild(new Bitmap(vec[i]));
  76.         obj.x = - obj.width / 2;
  77.         obj.y = - obj.height / 2;
  78.         obj.z = - 50 * (i - vec.length / 2);
  79.         
  80.         if (i == 0continue;
  81.         obj.blendMode = BlendMode.SCREEN;
  82.       }
  83.     }
  84.     
  85.     /**
  86.      * Seperate RGB Channel
  87.      * @param  Bitmap
  88.      * @return  RGB + Black Vector.<BitmapData>
  89.      */
  90.     private function createRGBChannel(bmp:Bitmap):Array
  91.     {
  92.       var b:BitmapData = new BitmapData(bmp.width, bmp.height, true, 0xFF000000);
  93.       var r:BitmapData = new BitmapData(bmp.width, bmp.height, true, 0xFF000000);
  94.       var g:BitmapData = new BitmapData(bmp.width, bmp.height, true, 0xFF000000);
  95.       b.copyChannel(bmp.bitmapData, new Rectangle(00, bmp.width, bmp.height), new Point(), BitmapDataChannel.BLUE, BitmapDataChannel.BLUE);
  96.       r.copyChannel(bmp.bitmapData, new Rectangle(00, bmp.width, bmp.height), new Point(), BitmapDataChannel.RED, BitmapDataChannel.RED);
  97.       g.copyChannel(bmp.bitmapData, new Rectangle(00, bmp.width, bmp.height), new Point(), BitmapDataChannel.GREEN, BitmapDataChannel.GREEN);
  98.       
  99.       return [new BitmapData(bmp.width, bmp.height, true, 0xFF000000), r, g, b];
  100.     }
  101.     
  102.     /**
  103.      * Eneter Frameの処理
  104.      */
  105.     private function onEnterFrame(e:Event):void
  106.     {
  107.       if (move)
  108.       {
  109.         panAngle += ((mouseX - lastMouseX) / stage.stageWidth * 180 + lastPanAngle - panAngle) * CAMERA_SPEED;
  110.         tiltAngle += ((mouseY - lastMouseY) / stage.stageHeight * 180 + lastTiltAngle - tiltAngle) * CAMERA_SPEED;
  111.       }
  112.       else
  113.       {
  114.         panAngle += (0 - panAngle) * CAMERA_SPEED;
  115.         tiltAngle += (0 - tiltAngle) * CAMERA_SPEED;
  116.       }
  117.       wrap.rotationX = tiltAngle;
  118.       wrap.rotationY = panAngle;
  119.       
  120.       // 以下 Zソート
  121.       var arr:Array = []
  122.       for (var i:int = 0; i < wrap.numChildren; i++)
  123.       {
  124.         var ele:DisplayObject = wrap.getChildAt(i);
  125.         var mtx:Matrix3D = ele.transform.getRelativeMatrix3D(main);
  126.         arr.push( { ele:ele, z:mtx.position.z } );
  127.       }
  128.       arr.sortOn("z"Array.NUMERIC | Array.DESCENDING);
  129.       var baseZ:Number = wrap.z;
  130.       for (i = 0; i < arr.length; i++)
  131.       {
  132.         ele = arr[i].ele;
  133.         var z:Number = arr[i].z;
  134.         wrap.setChildIndex(ele, i);
  135.       }
  136.     }
  137.     
  138.     /**
  139.      * マウスを押したときの処理
  140.      */
  141.     private function mouseDown(event:MouseEvent):void
  142.     {
  143.       lastPanAngle = panAngle;
  144.       lastTiltAngle = tiltAngle;
  145.       lastMouseX = mouseX;
  146.       lastMouseY = mouseY;
  147.       move = true;
  148.     }
  149.     
  150.     /**
  151.      * マウスを話したときの処理
  152.      */
  153.     private function mouseUp(event:MouseEvent):void
  154.     {
  155.       move = false;
  156.     }
  157.     
  158.     // ------------------------------------------
  159.     // いろいろ変数
  160.     // ------------------------------------------
  161.     private var move:Boolean = false;
  162.     private var lastMouseX:Number;
  163.     private var lastMouseY:Number;
  164.     private var lastPanAngle:Number;
  165.     private var lastTiltAngle:Number;
  166.     private var panAngle:Number = 0;
  167.     private var tiltAngle:Number = 0;
  168.     
  169.     private var main:Sprite;
  170.     private var wrap:Sprite;
  171.     private var loader:Loader;
  172.   }
  173.   
  174. }
noswf
  1. // forked from clockmaker's RGB Separater
  2. package 
  3. {
  4.   import flash.display.*;
  5.   import flash.events.*;
  6.   import flash.geom.*;
  7.   import flash.net.*;
  8.   import flash.system.LoaderContext;
  9.   
  10.   [SWF(backgroundColor="0x808080", frameRate="60", width="465", height="465")]
  11.   
  12.   /**
  13.    * RGB色分解するデモ
  14.    * マウスでステージをドラッグしてみてね
  15.    */
  16.   public class Main extends Sprite 
  17.   {
  18.     /**
  19.      * スピードの値
  20.      */
  21.     static private const CAMERA_SPEED:Number = .1;
  22.     
  23.     /**
  24.      * 画像のパス
  25.      * FlickrのピクチャでもOK!
  26.      */
  27.     static private const IMAGE_URL:String = "http://clockmaker.jp/imgs/mooning-light_300x300.jpg"
  28.     //static private const IMAGE_URL:String = "http://farm1.static.flickr.com/50/146026358_13c698d683_m.jpg"
  29.     
  30.     /**
  31.      * コンストラクター
  32.      */
  33.     public function Main()
  34.     {
  35.       var perspectiveProjection:PerspectiveProjection = root.transform.perspectiveProjection;
  36.       perspectiveProjection.focalLength = 10000;
  37.       
  38.       // LoaderContextを準備(クロスドメインを使用するため)
  39.       var context:LoaderContext = new LoaderContext(true);
  40.       
  41.       // 外部画像読み込み
  42.       loader = new Loader();
  43.       loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadHandler);
  44.       loader.load(new URLRequest(IMAGE_URL), context);
  45.       
  46.       // and bg
  47.       var bgMatrix:Matrix = new Matrix();
  48.       bgMatrix.rotate(90 * Math.PI / 180);
  49.       graphics.beginGradientFill("linear", [0xFFFFFF, 0x001122], [100100], [0255], bgMatrix);
  50.       graphics.drawRect(00, stage.stageWidth, stage.stageHeight);
  51.     }
  52.     
  53.     /**
  54.      * 画像の読み込み完了時の処理
  55.      */
  56.     private function loadHandler(e:Event):void
  57.     {
  58.       // イベントを設定
  59.       stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
  60.       stage.addEventListener(MouseEvent.MOUSE_UP, mouseUp);
  61.       addEventListener(Event.ENTER_FRAME, onEnterFrame);
  62.       
  63.       // RGBチャンネルに分解する
  64.       var vec:Array = createRGBChannel(loader.content as Bitmap);
  65.        
  66.       // 3Dオブジェクトをいれるラッパーを作成
  67.       main = Sprite(addChild(new Sprite()));
  68.       wrap = Sprite(main.addChild(new Sprite()));
  69.       wrap.x = stage.stageWidth / 2;
  70.       wrap.y = stage.stageHeight / 2;
  71.       
  72.       //Add some reference objects
  73.       for (var i:int = 0; i < vec.length; i++)
  74.       {
  75.         var obj:DisplayObject = wrap.addChild(new Bitmap(vec[i]));
  76.         obj.x = - obj.width / 2;
  77.         obj.y = - obj.height / 2;
  78.         obj.z = - 50 * (i - vec.length / 2);
  79.         
  80.         if (i == 0continue;
  81.         obj.blendMode = BlendMode.SCREEN;
  82.       }
  83.     }
  84.     
  85.     /**
  86.      * Seperate RGB Channel
  87.      * @param  Bitmap
  88.      * @return  RGB + Black Vector.<BitmapData>
  89.      */
  90.     private function createRGBChannel(bmp:Bitmap):Array
  91.     {
  92.       var b:BitmapData = new BitmapData(bmp.width, bmp.height, true, 0xFF000000);
  93.       var r:BitmapData = new BitmapData(bmp.width, bmp.height, true, 0xFF000000);
  94.       var g:BitmapData = new BitmapData(bmp.width, bmp.height, true, 0xFF000000);
  95.       b.copyChannel(bmp.bitmapData, new Rectangle(00, bmp.width, bmp.height), new Point(), BitmapDataChannel.BLUE, BitmapDataChannel.BLUE);
  96.       r.copyChannel(bmp.bitmapData, new Rectangle(00, bmp.width, bmp.height), new Point(), BitmapDataChannel.RED, BitmapDataChannel.RED);
  97.       g.copyChannel(bmp.bitmapData, new Rectangle(00, bmp.width, bmp.height), new Point(), BitmapDataChannel.GREEN, BitmapDataChannel.GREEN);
  98.       
  99.       return [new BitmapData(bmp.width, bmp.height, true, 0xFF000000), r, g, b];
  100.     }
  101.     
  102.     /**
  103.      * Eneter Frameの処理
  104.      */
  105.     private function onEnterFrame(e:Event):void
  106.     {
  107.       if (move)
  108.       {
  109.         panAngle += ((mouseX - lastMouseX) / stage.stageWidth * 180 + lastPanAngle - panAngle) * CAMERA_SPEED;
  110.         tiltAngle += ((mouseY - lastMouseY) / stage.stageHeight * 180 + lastTiltAngle - tiltAngle) * CAMERA_SPEED;
  111.       }
  112.       else
  113.       {
  114.         panAngle += (0 - panAngle) * CAMERA_SPEED;
  115.         tiltAngle += (0 - tiltAngle) * CAMERA_SPEED;
  116.       }
  117.       wrap.rotationX = tiltAngle;
  118.       wrap.rotationY = panAngle;
  119.       
  120.       // 以下 Zソート
  121.       var arr:Array = []
  122.       for (var i:int = 0; i < wrap.numChildren; i++)
  123.       {
  124.         var ele:DisplayObject = wrap.getChildAt(i);
  125.         var mtx:Matrix3D = ele.transform.getRelativeMatrix3D(main);
  126.         arr.push( { ele:ele, z:mtx.position.z } );
  127.       }
  128.       arr.sortOn("z"Array.NUMERIC | Array.DESCENDING);
  129.       var baseZ:Number = wrap.z;
  130.       for (i = 0; i < arr.length; i++)
  131.       {
  132.         ele = arr[i].ele;
  133.         var z:Number = arr[i].z;
  134.         wrap.setChildIndex(ele, i);
  135.       }
  136.     }
  137.     
  138.     /**
  139.      * マウスを押したときの処理
  140.      */
  141.     private function mouseDown(event:MouseEvent):void
  142.     {
  143.       lastPanAngle = panAngle;
  144.       lastTiltAngle = tiltAngle;
  145.       lastMouseX = mouseX;
  146.       lastMouseY = mouseY;
  147.       move = true;
  148.     }
  149.     
  150.     /**
  151.      * マウスを話したときの処理
  152.      */
  153.     private function mouseUp(event:MouseEvent):void
  154.     {
  155.       move = false;
  156.     }
  157.     
  158.     // ------------------------------------------
  159.     // いろいろ変数
  160.     // ------------------------------------------
  161.     private var move:Boolean = false;
  162.     private var lastMouseX:Number;
  163.     private var lastMouseY:Number;
  164.     private var lastPanAngle:Number;
  165.     private var lastTiltAngle:Number;
  166.     private var panAngle:Number = 0;
  167.     private var tiltAngle:Number = 0;
  168.     
  169.     private var main:Sprite;
  170.     private var wrap:Sprite;
  171.     private var loader:Loader;
  172.   }
  173.   
  174. }
noswf
Get Adobe Flash Player