Tilt-Shift撮影風加工機の事 zahir forked:1favorite:7lines:233license : All rights reserved modified : 2009-11-20 21:17:22 Embed Tweet <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="init()" backgroundColor="#CCCCCC" height="465" width="465"> <mx:Script> <![CDATA[ import mx.core.UIComponent; import com.adobe.images.PNGEncoder; private var w:int, h:int; private var save_name:String = "undef"; private var file:FileReference; private var loader:Loader; private var cont:UIComponent; private var level:Shader; private var lineBlur:ByteArray; private var bd:BitmapData; private var bmp:Bitmap; private var p1:Sprite; private var p2:Sprite; private function init():void{ w = 320; h = 240; cont = new UIComponent(); frame.addChild(cont); bd = new BitmapData(w,h); bmp = new Bitmap(bd); cont.addChild( bmp ); p1 = createPointer(0xFF0000); p2 = createPointer(0x0000FF); level = this.LevelsShader(); lineBlur = this.FocusingLinearBlurShader(); Wonderfl.capture_delay( 60 ); } private function createPointer(strokeColor:uint):Sprite{ var s:Sprite = new Sprite(); var g:Graphics = s.graphics; g.lineStyle(0, strokeColor); g.moveTo(0,0); g.lineTo(1,1); g.beginFill(0xFFFFFF); g.drawCircle(0, 0, 5) g.endFill(); s.addEventListener( MouseEvent.MOUSE_DOWN, onDown); return s; } private var pt:Sprite; private function onDown(e:MouseEvent):void{ pt = e.target as Sprite; pt.stage.addEventListener(MouseEvent.MOUSE_MOVE, onMove); pt.stage.addEventListener(MouseEvent.MOUSE_UP, onUp); } private function onMove(e:MouseEvent):void{ e.updateAfterEvent(); pt.x += pt.mouseX; pt.x = pt.x < 0 ? 0: pt.x > loader.width ? loader.width : pt.x; pt.y += pt.mouseY; pt.y = pt.y < 0 ? 0: pt.y > loader.height ? loader.height : pt.y; change(); } private function onUp(e:MouseEvent):void{ pt.stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMove); pt.stage.removeEventListener(MouseEvent.MOUSE_UP, onUp); } private function loadImg():void{ file = new FileReference(); file.addEventListener(Event.SELECT, onSelect); file.browse( [getTypeFilter()] ); } private function getTypeFilter():FileFilter{ return new FileFilter("Images (*.jpg, *.png)", "*.jpg;*.png"); } private function onSelect(e:Event):void{ file.addEventListener(Event.COMPLETE, onComp); file.load(); } private function onComp(e:Event):void{ if(!S_Btn.enabled){ S_Btn.enabled = true; luminance1.enabled = true; luminance2.enabled = true; uScale.enabled = true; vScale.enabled = true; quality.enabled = true; cont.addChild( p1); cont.addChild( p2); p2.x = w; p2.y = h; } if(loader){ loader.unload(); } loader = new Loader(); loader.loadBytes(FileReference(e.target).data); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imgLoad); } private function imgLoad(e:Event):void{ //cont.addChild( loader ); if(loader.width > w){ loader.width = w, loader.scaleY = loader.scaleX; cont.x = 0; cont.y = (h - loader.height) /2; }if(loader.height > h){ loader.height = h, loader.scaleX = loader.scaleY; cont.x = (w - loader.width) / 2; cont.y = 0; } p1.x = p1.x < 0 ? 0: p1.x > loader.width ? loader.width : p1.x; p1.y = p1.y < 0 ? 0: p1.y > loader.height ? loader.height : p1.y; p2.x = p2.x < 0 ? 0: p2.x > loader.width ? loader.width : p2.x; p2.y = p2.y < 0 ? 0: p2.y > loader.height ? loader.height : p2.y; bd.dispose(); bd = new BitmapData(loader.width, loader.height); var m:Matrix = new Matrix(); m.scale( loader.scaleX, loader.scaleY); bd.draw( loader , m); bmp.bitmapData = bd; change(); } private function saveImg():void{ var copy:BitmapData = new BitmapData(loader.width, loader.height); copy.draw(bmp); var s_img:ByteArray = PNGEncoder.encode( copy ); var file:FileReference = new FileReference(); file.addEventListener(Event.SELECT, s_onSelect); file.save(s_img, save_name + ".png"); copy.dispose(); } private function s_onSelect(e:Event):void{ } private var l1:Number; private var l2:Number; private function change():void{ var arr:Array = []; var _arr:Array = lineEquation(); var ratios:Array = countRatios(quality.value); for(var i:int = quality.value -1; i>-1; i--){ var shader:Shader = new Shader( lineBlur ); shader.data.lineEquation.value = _arr; shader.data.uScale.value = [uScale.value * ratios[i]]; shader.data.vScale.value = [vScale.value * ratios[i]]; arr.push( new ShaderFilter(shader) ); } level.data.luminance.value = [luminance1.value, luminance2.value]; var levelFilter:ShaderFilter = new ShaderFilter( level ); arr.push( levelFilter ); bmp.filters = arr; } private function lineEquation():Array{ var A:Number = p2.y - p1.y; var B:Number = p1.x - p2.x; var L:Number = Math.max( Math.sqrt( A*A + B*B ), 0.00000001); A /= L; B /= L; var C:Number = -A*p1.x - B*p1.y; return [A, B, C]; } private function countRatios(q:int = 3):Array{ var ratios:Array = []; var j:int =1; var sum:Number = 0; for(var i:int = 0; i<q; i++){ ratios.push( j ); sum += j; j <<= 1; } for(var item in ratios){ ratios[item] /= sum; } return ratios; } /*------------------------------------------------------------------------------------------------------ Shader's ------------------------------------------------------------------------------------------------------*/ public function LevelsShader():Shader{ var _data:Vector.<int> = Vector.<int>( [ 165, 1, 0, 0, 0, 164, 6, 0, 76, 101, 118, 101, 108, 115, 160, 12, 110, 97, 109, 101, 115, 112, 97, 99, 101, 0, 99, 111, 109, 46, 97, 110, 116, 116, 105, 107, 117, 112, 105, 108, 97, 0, 160, 12, 118, 101, 110, 100, 111, 114, 0, 65, 110, 116, 116, 105, 32, 75, 117, 112, 105, 108, 97, 0, 160, 8, 118, 101, 114, 115, 105, 111, 110, 0, 1, 0, 160, 12, 100, 101, 115, 99, 114, 105, 112, 116, 105, 111, 110, 0, 76, 101, 118, 101, 108, 115, 32, 102, 105, 108, 116, 101, 114, 0, 161, 1, 2, 0, 0, 12, 95, 79, 117, 116, 67, 111, 111, 114, 100, 0, 161, 1, 2, 0, 0, 3, 114, 101, 100, 0, 162, 2, 109, 105, 110, 86, 97, 108, 117, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 2, 109, 97, 120, 86, 97, 108, 117, 101, 0, 63, 128, 0, 0, 63, 128, 0, 0, 162, 2, 100, 101, 102, 97, 117, 108, 116, 86, 97, 108, 117, 101, 0, 0, 0, 0, 0, 63, 128, 0, 0, 161, 1, 2, 1, 0, 12, 103, 114, 101, 101, 110, 0, 162, 2, 109, 105, 110, 86, 97, 108, 117, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 2, 109, 97, 120, 86, 97, 108, 117, 101, 0, 63, 128, 0, 0, 63, 128, 0, 0, 162, 2,100, 101, 102, 97, 117, 108, 116, 86, 97, 108, 117, 101, 0, 0, 0, 0, 0, 63, 128, 0, 0, 161, 1, 2, 1, 0, 3, 98, 108, 117, 101, 0, 162, 2, 109, 105, 110, 86, 97, 108, 117, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 2, 109, 97, 120, 86, 97, 108, 117, 101, 0, 63, 128, 0, 0, 63, 128, 0, 0, 162, 2, 100, 101, 102, 97, 117, 108, 116, 86, 97, 108, 117, 101, 0, 0, 0, 0, 0, 63, 128, 0, 0, 161, 1, 2, 2, 0, 12, 108, 117, 109, 105, 110, 97, 110, 99, 101, 0, 162, 2, 109, 105, 110, 86, 97, 108, 117, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 2, 109, 97, 120, 86, 97, 108, 117, 101, 0, 63, 128, 0, 0, 63, 128, 0, 0, 162, 2, 100, 101, 102, 97, 117, 108, 116, 86, 97, 108, 117, 101, 0, 0, 0, 0, 0, 63, 128, 0, 0, 163, 0, 4, 115, 114, 99, 0, 161, 2, 4, 3, 0, 15, 100, 115, 116, 0, 48, 4, 0, 241, 0, 0, 16, 0, 29, 5, 0, 243, 4, 0, 27, 0, 29, 2, 0, 32, 2, 0, 64, 0, 2, 2, 0, 32, 2, 0, 0, 0, 29, 2, 0, 16, 2, 0, 128, 0, 29, 2, 0, 32, 5, 0, 0, 0, 2, 2, 0, 32, 0, 0, 128, 0, 29, 4, 0, 128, 0, 0, 192, 0, 2, 4, 0, 128, 0, 0, 128, 0, 4, 4, 0, 64, 4, 0, 0, 0, 3, 4, 0, 64, 2, 0, 128, 0, 29, 2, 0, 32, 4,0, 64, 0, 2, 2, 0, 32, 2, 0, 0, 0, 4, 4, 0, 128, 2, 0, 192, 0, 3, 4, 0, 128, 2, 0, 128, 0, 29, 5, 0, 128, 4, 0, 0, 0, 29, 2, 0, 32, 5, 0, 64, 0, 2, 2, 0, 32, 1, 0, 0, 0, 29, 4, 0, 128, 1, 0, 64, 0, 2, 4, 0, 128, 1, 0, 0, 0, 4, 4, 0, 64, 4, 0, 0, 0, 3, 4, 0, 64, 2, 0, 128, 0, 29, 2, 0, 32, 4, 0, 64, 0, 2, 2, 0, 32, 2, 0, 0, 0, 4, 4, 0, 128, 2, 0, 192, 0, 3, 4, 0, 128, 2, 0, 128, 0, 29, 5, 0, 64, 4, 0, 0, 0, 29, 2, 0, 32, 5, 0, 128, 0, 2, 2, 0, 32, 1, 0, 128, 0, 29, 4, 0, 128, 1, 0, 192, 0, 2, 4, 0, 128, 1, 0, 128, 0, 4, 4, 0, 64, 4, 0, 0, 0, 3, 4, 0, 64, 2, 0, 128, 0, 29, 2, 0, 32, 4, 0, 64, 0, 2, 2, 0, 32, 2, 0, 0, 0, 4, 4, 0, 128, 2, 0, 192, 0, 3, 4, 0, 128, 2, 0, 128, 0, 29, 5, 0, 32, 4, 0, 0, 0, 29, 3, 0, 243, 5, 0, 27, 0 ] ); var _byteCode:ByteArray; if ( !_byteCode){ _byteCode = new ByteArray(); for ( var i:int = 0, len:int = _data.length; i<len; i++) _byteCode.writeByte( _data[i] ); } return new Shader(_byteCode); } public function FocusingLinearBlurShader():ByteArray{ var _data:Vector.<int> = Vector.<int>( [ 165, 1, 0, 0, 0, 164, 18, 0, 70, 111, 99, 117, 115, 105, 110, 103, 76, 105, 110, 101, 97, 114, 66, 108, 117, 114, 160, 12, 110, 97, 109, 101, 115, 112, 97, 99, 101, 0, 70, 111, 99, 117, 115, 105, 110, 103, 76, 105, 110, 101, 97, 114, 66, 108, 117, 114, 0, 160, 12, 118, 101, 110, 100, 111, 114, 0, 80, 101, 116, 114, 105, 32, 76, 101, 115, 107, 105, 110, 101, 110, 0, 160, 8, 118, 101, 114, 115, 105, 111, 110, 0, 1, 0, 160, 12, 100, 101, 115, 99, 114, 105, 112, 116, 105, 111, 110, 0, 108, 105, 110, 101, 97, 114, 32, 98, 108, 117, 114, 32, 98, 121, 32, 97, 32, 108, 105, 110, 101, 32, 101, 113, 117, 97, 116, 105, 111, 110, 0, 161, 1, 2, 0, 0, 12, 95, 79, 117, 116, 67, 111, 111, 114, 100, 0, 161, 1, 3, 1, 0, 14, 108, 105, 110, 101, 69, 113, 117, 97, 116, 105, 111, 110, 0, 162, 3, 109, 105, 110, 86, 97, 108, 117, 101, 0, 191, 128, 0, 0, 191, 128, 0, 0, 194, 200, 0, 0, 162, 3, 109, 97, 120, 86, 97, 108, 117, 101, 0, 63, 128, 0, 0, 63, 128, 0, 0, 66, 200, 0, 0, 162, 3, 100, 101, 102, 97, 117, 108, 116, 86, 97, 108, 117, 101, 0, 63, 52, 253, 244, 191, 52, 253, 244, 65, 240, 0, 0, 161, 1, 1, 0, 0, 2, 117, 83, 99, 97, 108, 101, 0, 162, 1, 109, 105, 110, 86, 97, 108, 117, 101, 0, 0, 0, 0, 0, 162, 1, 109, 97, 120, 86, 97, 108, 117, 101, 0, 65, 32, 0, 0, 162, 1, 100, 101, 102, 97, 117, 108, 116, 86, 97, 108, 117, 101, 0, 63, 128, 0, 0, 161, 1, 1, 0, 0, 1, 118, 83, 99, 97, 108, 101, 0, 162, 1, 109, 105, 110, 86, 97, 108, 117, 101, 0, 0, 0, 0, 0, 162, 1, 109, 97, 120, 86, 97, 108, 117, 101, 0, 65, 32, 0, 0, 162, 1, 100, 101, 102, 97, 117, 108, 116, 86, 97, 108, 117, 101, 0, 63, 128, 0, 0, 163, 0, 4, 115, 114, 99, 0, 161, 2, 4, 2, 0, 15, 100, 115, 116, 0, 29, 1, 0, 16, 1, 0, 0, 0, 3, 1, 0, 16, 0, 0, 0, 0, 29, 3, 0, 128, 1, 0, 64, 0, 3, 3, 0, 128, 0, 0, 64, 0, 29, 3, 0, 64, 1, 0, 192, 0, 1, 3, 0, 64, 3, 0, 0, 0, 29, 1, 0, 16, 3, 0, 64, 0, 1, 1, 0, 16, 1, 0, 128, 0, 29, 3, 0, 128, 1, 0, 192, 0, 50, 1, 0, 16, 60, 35, 215, 10, 3, 3, 0, 128, 1, 0, 192, 0, 29, 3, 0, 97, 3, 0, 0, 0, 3, 3, 0, 97, 1, 0, 16, 0, 29, 4, 0, 193, 3, 0, 96, 0, 29, 3, 0, 97, 0, 0, 160, 0, 3, 3, 0, 97, 4, 0, 16, 0, 29, 4, 0, 49, 3, 0, 96, 0, 29, 3, 0, 97, 0, 0, 16, 0, 1, 3, 0, 97, 4, 0, 176, 0, 49, 5, 0, 241, 3, 0, 96, 0, 29, 3, 0, 97, 0, 0, 16, 0, 2, 3, 0, 97, 4, 0, 176, 0, 49, 6, 0, 241, 3, 0, 96, 0, 29, 7, 0, 243, 5, 0, 27, 0, 1, 7, 0, 243, 6, 0, 27, 0, 29, 2, 0, 243, 7, 0, 27, 0, 29, 3, 0, 64, 4, 0, 64, 0, 50, 1, 0, 16, 0, 0, 0, 0, 2, 1, 0, 16, 4, 0, 0, 0, 29, 3, 0, 32, 1, 0, 192, 0, 29, 5, 0, 193, 0, 0, 240, 0, 3, 5, 0, 193, 3, 0, 96, 0, 29, 4, 0, 49, 5, 0, 16, 0, 29, 3, 0, 97, 0, 0, 16, 0, 1, 3, 0, 97, 4, 0, 176, 0, 49, 5, 0, 241, 3, 0, 96, 0, 29, 3, 0, 97, 0, 0, 16, 0, 2, 3, 0, 97, 4, 0, 176, 0, 49, 6, 0, 241, 3, 0, 96, 0, 29, 7, 0, 243, 5, 0, 27, 0, 1, 7, 0, 243, 6, 0, 27, 0, 1, 2, 0, 243, 7, 0, 27, 0, 50, 1, 0, 16, 62, 128, 0, 0, 3, 2, 0, 243, 1, 0, 255, 0 ] ); var _byteCode:ByteArray; if ( !_byteCode){ _byteCode = new ByteArray(); for ( var i:int = 0, len:int = _data.length; i<len; i++) _byteCode.writeByte( _data[i] ); } return _byteCode; } ]]> </mx:Script> <mx:Style> Label{ color:#FFFFFF; } </mx:Style> <mx:VBox width="100%" height="100%" verticalGap="0"> <mx:HBox width="100%" height="30" horizontalGap="5" verticalAlign="middle" paddingLeft="8"> <mx:Button label="Load" id="L_Btn" click="loadImg()"/> <mx:Button label="Save" id="S_Btn" click="saveImg()" enabled="false"/> </mx:HBox> <mx:VBox verticalGap="0" width="100%" height="100%"> <mx:HBox width="100%" height="100%" verticalAlign="middle" horizontalAlign="center" backgroundColor="#FFFFFF"> <mx:Canvas width="322" height="242" x="5" y="5" borderStyle="solid" borderColor="#333333" id="frame"> </mx:Canvas> </mx:HBox> <mx:HBox horizontalGap="0" height="130" width="100%" backgroundColor="#333333"> <mx:VBox width="100%" height="100%" paddingLeft="5" paddingRight="5" paddingTop="8" left="400"> <mx:Label text="Level" fontSize="16" fontWeight="bold"/> <mx:HBox width="100%"> <mx:Label text="luminance1"/> <mx:HSlider id="luminance1" width="120" minimum="0" maximum="1" enabled="false" change="change()" value="0"/> </mx:HBox> <mx:HBox width="100%"> <mx:Label text="luminance2"/> <mx:HSlider id="luminance2" width="120" minimum="0" maximum="1" enabled="false" change="change()" value="1"/> </mx:HBox> </mx:VBox> <mx:VBox width="100%" height="100%" paddingLeft="5" paddingRight="5" paddingTop="8" left="400"> <mx:Label text="LineBlur" fontSize="16" fontWeight="bold"/> <mx:HBox width="100%"> <mx:Label text="uScale"/> <mx:HSlider id="uScale" width="120" minimum="0" maximum="10" enabled="false" change="change()" value="1" snapInterval="1"/> </mx:HBox> <mx:HBox width="100%"> <mx:Label text="vScale"/> <mx:HSlider id="vScale" width="120" minimum="0" maximum="10" enabled="false" change="change()" value="1" snapInterval="1"/> </mx:HBox> <mx:HBox width="100%"> <mx:Label text="quality"/> <mx:HSlider id="quality" width="120" minimum="1" maximum="10" enabled="false" change="change()" value="3" snapInterval="1"/> </mx:HBox> </mx:VBox> </mx:HBox> </mx:VBox> </mx:VBox> </mx:Application> Code Fullscreen Preview Fullscreen dizgid k0rin miyaoka mrKaizen : imageloaderpngshifttilttilt shift - cairca immagine, modifica proprietà e salva zmaxlin : Shadertilt-shift katopz : Shader twelvetoes : ラインブラー Shader image loader png shift tilt tilt-shift sort new page view favorite forked pv360 forked from: Tilt-Shift撮影風加工機の.. baado forked:0 favorite:1lines:232 (diff:0)