zoukankan      html  css  js  c++  java
  • 一种水纹波浪效果

    package
    {
            import flash.display.Bitmap;
            import flash.display.BitmapData;
            import flash.display.BlendMode;
            import flash.display.DisplayObject;
            import flash.display.Loader;
            import flash.display.Sprite;
            import flash.display.StageScaleMode;
            import flash.events.Event;
            import flash.events.IOErrorEvent;
            import flash.events.MouseEvent;
            import flash.filters.ConvolutionFilter;
            import flash.filters.DisplacementMapFilter;
            import flash.geom.ColorTransform;
            import flash.geom.Matrix;
            import flash.geom.Point;
            import flash.geom.Rectangle;
            import flash.net.URLRequest;
            [SWF(frameRate='24',backgroundColor="0xffffff",width="522",height="477")]
    		/*
         	 *author : SinSoul 
         	 *blogs: http://www.cnblogs.com/sinsoul
     
    		*/
            public class WaterWave extends Sprite
            {
                    private var url:String = "0.jpg";
                    private var mouseDown:Boolean = false;
                    //
                    private var damper:BitmapData;
                    private var result:BitmapData;
                    private var result2:BitmapData;
                    private var source:BitmapData;
                    private var buffer:BitmapData;
                    private var output:BitmapData;
                    private var surface:BitmapData;
                    private var bounds:Rectangle;
                    private var origin:Point;
                    private var matrix:Matrix;
                    private var matrix2:Matrix;
                    private var wave:ConvolutionFilter;
                    private var damp:ColorTransform;
                    private var water:DisplacementMapFilter;
                    //
                    private var imgW:Number = 522;
                    private var imgH:Number = 477;
                    public function WaterWave(){
                            this.stage.scaleMode = StageScaleMode.NO_SCALE;
                            super();
                            damper = new BitmapData(imgW, imgH, false, 128);
                            result = new BitmapData(imgW, imgH, false, 128);
                            result2 = new BitmapData(imgW*2, imgH*2, false, 128);
                            source = new BitmapData(imgW, imgH, false, 128);
                            buffer = new BitmapData(imgW, imgH, false, 128);
                            output = new BitmapData(imgW*2, imgH*2, true, 128);
                            bounds = new Rectangle(0, 0, imgW, imgH);
                            origin = new Point();
                            matrix = new Matrix();
                            matrix2 = new Matrix();
                            matrix2.a = matrix2.d=2;
                            wave = new ConvolutionFilter(3, 3, [1, 1, 1, 1, 1, 1, 1, 1, 1], 9, 0);
                            damp = new ColorTransform(0, 0, 9.960937E-001, 1, 0, 0, 2, 0);
                            water = new DisplacementMapFilter(result2, origin, 4, 4, 48, 48, "ignore");
                            var _bg:Sprite = new Sprite();
                            this.addChild(_bg);
                            _bg.graphics.beginFill(0xFFFFFF,0);
                            _bg.graphics.drawRect(0,0,imgW,imgH);
                            _bg.graphics.endFill();
                            this.addChild(new Bitmap(output));
                            this.buildImg();
                    }
                    private function mouseDownHandle(_e:MouseEvent):void{
                            mouseDown = true;
                    }
                    private function mouseUpHandle(_e:MouseEvent):void{
                            mouseDown = false;
                    }
                    private function frameHandle(_e:Event):void{
                            if (mouseDown) {
                                    var _x:Number = this.mouseX/2;
                                    var _y:Number = this.mouseY/2;
                                    source.setPixel(_x+1, _y, 16777215);
                                    source.setPixel(_x-1, _y, 16777215);
                                    source.setPixel(_x, _y+1, 16777215);
                                    source.setPixel(_x, _y-1, 16777215);
                                    source.setPixel(_x, _y, 16777215);
                            }
                            // end if           
                            result.applyFilter(source, bounds, origin, wave);
                            result.draw(result, matrix, null, BlendMode.ADD);
                            result.draw(buffer, matrix, null, BlendMode.DIFFERENCE);
                            result.draw(result, matrix, damp);
                            result2.draw(result, matrix2, null, null, null, true);
                            output.applyFilter(surface, new Rectangle(0, 0, imgW*2, imgH*2), origin, water);
                            buffer = source;
                            source = result.clone();
                    }
                    private function buildImg():void {
                var loader:Loader = new Loader();
                loader.contentLoaderInfo        .addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
                loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadHandler);
                var request:URLRequest = new URLRequest(url);
                loader.load(request);
            }
            private function loadHandler(event:Event):void {
                var child:DisplayObject = DisplayObject(event.target.loader);
                surface = new BitmapData(imgW,imgH,true);
                surface.draw(child,null,null,null,null,true);
                this.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandle);
                            this.addEventListener(MouseEvent.MOUSE_UP,mouseUpHandle);
                            this.addEventListener(Event.ENTER_FRAME,frameHandle);
            }
                    private function ioErrorHandler(event:IOErrorEvent):void {
                trace("Unable to load image: " + url);
            }
            }
    }
    

  • 相关阅读:
    C++如何在Dialog和View中显示梯度背景颜色
    C++MFC的关键类(View,Application,Frame,Document等等)之间访问方法列表
    C++深入分析MFC文档视图结构(项目实践)
    C++如何修改SDI程序的默认背景颜色
    BAPI使用HR_INFOTYPE_OPERATION函数批量导入HR信息纪录代码样例(0759信息类型)
    C++在单文档的应用程序增加多个视图
    SD定价过程的16个字段的作用说明
    HR上载信息类型的长文本的样例代码
    C++在工具条中加入组合框控件
    C++如何锁定splitter窗口
  • 原文地址:https://www.cnblogs.com/sinsoul/p/1876485.html
Copyright © 2011-2022 走看看