copyChannelでRGB
♥0 |
Line 133 |
Modified 2010-05-26 13:11:34 |
MIT License
archived:2017-03-20 05:28:39
| (replaced)
ActionScript3 source code
/**
* Copyright y_tti ( http://wonderfl.net/user/y_tti )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/1Vd0
*/
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.BitmapDataChannel;
import flash.display.BlendMode;
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.net.URLRequest;
import flash.system.ApplicationDomain;
import flash.system.LoaderContext;
import flash.system.SecurityDomain;
[SWF(width = "465", height = "465", frameRate = "30", backgroundColor = "0x000000")]
public class ytti_rgbTest extends Sprite
{
//[Embed(source="test.jpg")] private var TestImage:Class;
//private var _imageBmd:BitmapData = Bitmap(new TestImage()).bitmapData;
private var _imageBmd:BitmapData
private var _mouseOnFlg:Boolean = false;
private var _line:Shape;
private var _linebasePt:Point;
private var _images:Array;
public function ytti_rgbTest()
{
//_init();
//画像ロード
var context:LoaderContext = new LoaderContext;
context.checkPolicyFile = true;
context.applicationDomain = ApplicationDomain.currentDomain;
context.securityDomain = SecurityDomain.currentDomain;
var url:String = "http://assets.wonderfl.net/images/related_images/c/c1/c1f2/c1f20299091a2bcfac2d52a254169bc849720cf4";
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE , _loadCompHandler );
loader.load( new URLRequest(url) , context);
}
private function _loadCompHandler(e:Event):void {
//bitmapdata取得
LoaderInfo(e.target).removeEventListener(Event.COMPLETE , _loadCompHandler );
_imageBmd = Bitmap(LoaderInfo(e.target).content).bitmapData;
_init();
}
private function _init():void {
_images = [];
var rgbBmds:Array = _createRGBBmd(_imageBmd); //RGBのBitmapData作成
for(var i:int = 0;i < rgbBmds.length;i++ ){
var bmd:BitmapData = rgbBmds[i];
var img:Img = new Img(bmd);
img.blendMode = BlendMode.ADD;
addChild(img);
_images.push(img);
img.x = i*10;
}
stage.addEventListener(MouseEvent.MOUSE_DOWN , _mouseDownHandler );
addEventListener(Event.ENTER_FRAME , _update );
}
private function _createRGBBmd($bmd:BitmapData):Array {
var rect:Rectangle = new Rectangle( 0, 0, $bmd.width , $bmd.height );
var p:Point = new Point(0,0);
var r:BitmapData = new BitmapData( $bmd.width , $bmd.height , true , 0xFF000000 );
var g:BitmapData = new BitmapData( $bmd.width , $bmd.height , true , 0xFF000000 );
var b:BitmapData = new BitmapData( $bmd.width , $bmd.height , true , 0xFF000000 );
r.copyChannel( $bmd , rect , p , BitmapDataChannel.RED , BitmapDataChannel.RED );
g.copyChannel( $bmd , rect , p , BitmapDataChannel.GREEN , BitmapDataChannel.GREEN );
b.copyChannel( $bmd , rect , p , BitmapDataChannel.BLUE , BitmapDataChannel.BLUE );
return [r,g,b];
}
private function _mouseDownHandler(e:MouseEvent):void {
//マウスオン時のライン
_line = new Shape();
addChild(_line);
_linebasePt = new Point(mouseX,mouseY);
_mouseOnFlg = true;
stage.addEventListener(MouseEvent.MOUSE_UP , _mouseUpHandler );
}
private function _mouseUpHandler(e:MouseEvent):void {
//マウスオン時のライン
if(_line) {
removeChild(_line);
_line = null;
}
_mouseOnFlg = false;
stage.removeEventListener(MouseEvent.MOUSE_UP , _mouseUpHandler );
}
private function _update(e:Event):void {
var i:int;
var img:Img;
var dx:Number = 0;
var dy:Number = 0;
var vx:Number = 0;
var vy:Number = 0;
if(_mouseOnFlg){
_line.graphics.clear();
_line.graphics.lineStyle(1,0xFFFF00);
_line.graphics.moveTo(_linebasePt.x,_linebasePt.y);
_line.graphics.lineTo(mouseX,mouseY);
dx = _linebasePt.x-mouseX;
dy = _linebasePt.y-mouseY;
for(i = 0;i < _images.length;i++ ){
img = _images[i];
img.x = dx * (i+1)/_images.length ;
img.y = dy * (i+1)/_images.length;
}
} else {
//バネ運動
for(i = 0;i < _images.length;i++ ){
img = _images[i];
img.dx = 0-img.x;
img.dy = 0-img.y;
img.ax = img.dx * 0.1;
img.ay = img.dy * 0.1;
img.vx += img.ax;
img.vy += img.ay;
img.vx *= 0.9;
img.vy *= 0.9;
img.x += img.vx;
img.y += img.vy;
}
}
}
}
}
import flash.display.Bitmap;
import flash.display.BitmapData;
class Img extends Bitmap{
public var dx:Number = 0;
public var dy:Number = 0;
public var ax:Number = 0;
public var ay:Number = 0;
public var vx:Number = 0;
public var vy:Number = 0;
public function Img($bmd:BitmapData){
super($bmd);
}
}
