CircleTransition ?

by zahir
♥0 | Line 97 | Modified 2009-06-25 02:39:42 | MIT License
play

ActionScript3 source code

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

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
	width="465" height="465" backgroundColor="0xFFFFFF"
	creationComplete="init()" >
	<mx:Script>
		<![CDATA[
			import mx.utils.Base64Decoder;
			private var s:Shader;
			private var d:ShaderData;
			private var f:FileReference;
			private var layer:String = "fore";
			private var foreLay:BitmapData;
			private var backLay:BitmapData;
			private var res:BitmapData;
			
			private var flg:Boolean = false;
			
			private function init():void{
				s = getCircleTransition();
				d = s.data;
				res = new BitmapData( 425, 345 );
				img.source = new Bitmap( res );
			}
			private  function getCircleTransition():Shader{
				var dec:Base64Decoder = new Base64Decoder();
				dec.decode( "pQEAAACkEABDaXJjbGVUcmFuc2l0aW9uoAxuYW1lc3BhY2UAemFoaXIxOTI5AKAMdmVuZG9yAHphaGlyAKAIdmVyc2lvbgABAKAMZGVzY3JpcHRpb24AeW91ciBkZXNjcmlwdGlvbgChAQIAAAxfT3V0Q29vcmQAowAEZm9yZQCjAQRiYWNrAKECBAEAD2RzdAChAQIAAANjZW50ZXIAogJtYXhWYWx1ZQBFegAARXoAAKICbWluVmFsdWUAxXoAAMV6AACiAmRlZmF1bHRWYWx1ZQBDgAAAQ4AAAKEBAQIACHJvdGF0ZQCiAW1heFZhbHVlAEO0AACiAW1pblZhbHVlAMO0AACiAWRlZmF1bHRWYWx1ZQAAAAAAogxkZXNjcmlwdGlvbgBzdGFydCBhbmdsZQChAQgBgAhyZWZsZWN0aW9uAKIIbWF4VmFsdWUAAQCiCG1pblZhbHVlAAAAoghkZWZhdWx0VmFsdWUAAQChAQECAAR0aW1lAKIBbWF4VmFsdWUAP4AAAKIBbWluVmFsdWUAAAAAAKIBZGVmYXVsdFZhbHVlAAAAAAAdAgAxAAAQAB0DAMECALAAAgMAwQAAsAAdAwAxAwAQADIDAIA/gAAAMgGAQAEAAAAoAYCAAYBAAB0BgCAAgAAANAAAAAGAgAAyAwBAv4AAAAMDAIADAEAANgAAAAAAAAAdAwBAAwDAAAYDAEADAIAAMgQAgDyO800EBABABAAAAAMEAEADAEAAHQMAQAQAQAABAwBAAgAAAB0EAIADAAAAAwQAgAMAQAAdAwBABAAAADIEAIAAAAAAKgMAQAQAAAAdAYBAAIAAADQAAAABgEAAMgQAgEO0AAABAwBABAAAADYAAAAAAAAAMgQAgEO0AAAdBABAAwBAAAgEAEAEAAAAHQMAQAQAQAAyBACAQ7QAAB0EAEAEAAAAAwQAQAIAQAAdBACABABAACsDAEAEAAAAHQGAQACAAAA0AAAAAYBAADAFAPECALABHQEA8wUAGwA1AAAAAAAAADAFAPECALAAHQEA8wUAGwA2AAAAAAAAAA==" );
				return new Shader( dec.toByteArray() );
			}
			
			private function load( _layer:String ):void{
				layer = _layer;
				f = new FileReference();
				f.addEventListener(Event.SELECT, onSelect);
				f.browse( [ new FileFilter("Image File (*.jpg, *.png)", "*.jpg; *.png") ] );
			}
			private function onSelect(e:Event):void{
				f.removeEventListener(Event.SELECT, onSelect);
				f.addEventListener(Event.COMPLETE, onComp);
				f.load();
			}
			private function onComp(e:Event):void{
				f.removeEventListener(Event.COMPLETE, onComp);
				var l:Loader = new Loader();
				l.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event):void{
					if(l.width > l.height){
						if(l.width > 425){
							l.width = 425;
							l.scaleY = l.scaleX;
						}
					}else{
						if(l.height > 345){
							l.height = 345;
							l.scaleX = l.scaleY;
						}
					}
					var m:Matrix = new Matrix();
					m.scale(l.scaleX, l.scaleY);
					if(layer == "fore"){
						foreLay = new BitmapData(l.width, l.height, false);
						foreLay.draw( l, m );
						d.fore.input = foreLay;
						d.fore.width = l.width;
						d.fore.height = l.height;
					}else{
						backLay = new BitmapData(l.width, l.height, false);
						backLay.draw( l, m );
						d.back.input = backLay;
						d.back.width = l.width;
						d.back.height = l.height;
					}
					if(foreLay != null && backLay != null){
						flg = true;
						onChange();
					}
				});
				l.loadBytes( f.data );
			}
			private function onChange():void{
				d.center.value = [cx.value, 345 - cy.value];
				d.reflection.value = [ ref.selected ? 1 : 0 ];
				d.rotate.value = [ rotate.value ];
				d.time.value = [ time.value ];
				if(flg){
					var sj:ShaderJob = new ShaderJob( s, res, 425, 345);
					sj.start( true );
				}
			}
		]]>
	</mx:Script>
	<mx:Image id="img" left="20" right="20" top="20" bottom="100" />
	<mx:HSlider change="onChange()" x="305" y="0" left="20" right="20" top="10" id="cx" maximum="425" minimum="0" value="212.5"/>
	<mx:VSlider change="onChange()"  left="10" top="20" bottom="100" id="cy" maximum="345" minimum="0" value="172.5"/>
	<mx:CheckBox change="onChange()"  label="ベクトル反転" id="ref" left="20" bottom="70"/>
	<mx:HSlider change="onChange()" right="20" bottom="75" left="190" value="0" maximum="360" minimum="-360" id="rotate"/>
	<mx:Label text="初期回転角度:" bottom="72" left="120"/>
	<mx:HSlider change="onChange()" left="80" right="20" bottom="50" value="0" maximum="1" minimum="0" id="time"/>
	<mx:Label x="20" y="400" text="進行度合い:"/>
	<mx:Button label="back image" bottom="15" right="20" click="load('back')"/>
	<mx:Button label="fore image" bottom="15" right="120" click="load('fore')"/>
</mx:Application>