zoukankan      html  css  js  c++  java
  • as3.0对图片进行不规则切割源代码实例

    import flash.display.Sprite;
    import flash.display.Loader;
    import flash.net.URLRequest;
    import flash.display.BitmapData;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.filters.GlowFilter;
    import flash.filters.DropShadowFilter;
    import flash.display.Bitmap;
    import flash.display.MovieClip;
     
    //拖动拼图 数组
    var spArray: Array = new Array();
    //被触碰拼图 对象
    var hit_Object: Object = {};
    var rows, cols, w, h, i, j, m, n: Number;
    var filterArray: Array = new Array();
    //当前拖动的拼图块
    var nowDrag_mc:MovieClip;
    //定义行数列数
    rows = 8;
    cols = 8;
    //画曲线的重要参数,curWidth为贝塞尔曲线的参数
    var curWidth: Number;
    var ellipseA: Number;
    var ellipseB: Number;
     
     
    //加载外部图片
    var url = new URLRequest("1.jpg");
    var _loader = new Loader();
    _loader.load(url);
    _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImgLoad);
     
    //定义滤镜
    var color1: Number = 0x33CCFF;
    var alp1: Number = 0.8;
    var blurX1: Number = 2;
    var blurY1: Number = 2;
    var strength1: Number = 2;
    var quality1: Number = 3;
    var inner1: Boolean = false;
    var knockout1: Boolean = false;
    var filter1: GlowFilter = new GlowFilter(color, alp1, blurX1, blurY1, strength1, quality1, inner1, knockout1);
    filterArray.push(filter1);
     
    var splArray: Array = new Array();
    var distance: Number = 3;
    var angleInDegrees: Number = 3;
    var color: Number = 0x000033;
    var alp: Number = 0.8;
    var blurX: Number = 3;
    var blurY: Number = 3;
    var strength: Number = 1;
    var quality: Number = 3;
    var inner: Boolean = false;
    var knockout: Boolean = false;
    var hideObject: Boolean = false;
    var filter: DropShadowFilter = new DropShadowFilter(distance, angleInDegrees, color, alp, blurX, blurY, strength, quality, inner, knockout, hideObject);
    filterArray.push(filter);
     
    //对每个格子的形状初始化,如果left, right, up, down全部为true表示四面有填充的椭圆
    for (i = 0; i < rows; i++) {
        for (j = 0; j < cols; j++) {
            //var ms: MySplit = new MySplit(i, j);
     
            var ms={row:i,col:j};
            //首先调用随机数,确认本格右方和下方是否填充
            m = int(Math.random() * 2);
            n = int(Math.random() * 2);
            if (m == 1 && j < cols - 1) {
                ms.right = true;
            }
            if (n == 1 && i < rows - 1) {
                ms.down = true;
            }
            //cuplayer.com检测本格左方是否需要填充
            if (j > 0 && !splArray[i * cols + j - 1].right) {
                ms.left = true;
            }
            //cuplayer.com检测本格上方是否需要填充
            if (i > 0 && !splArray[(i - 1) * cols + j].down) {
                ms.up = true;
            }
            splArray.push(ms);
        }
    }
     
    //cuplayer.com主处理函数
    function onImgLoad(event: Event): void {
         
        var bitmap: BitmapData = new BitmapData(_loader.width, _loader.height);
        w = _loader.width / rows;
        curWidth = w / (cols-1);
        h = _loader.height / cols;
        //ellipseA始终较大,这样可以适应竖着或横着的椭圆
        ellipseA = h > w ? h / rows : w / rows;
        ellipseB = h < w ? h / cols : w / cols;
         
         
         
        var sampleSprite: MovieClip ;
        //cuplayer.com逐个分割图片
        for (i = 0; i < rows; i++) {
            for (j = 0; j < cols; j++) {
                bitmap.draw(_loader);
                sampleSprite= new MovieClip();
                sampleSprite.graphics.lineStyle();
                sampleSprite.graphics.beginBitmapFill(bitmap);
                myDraw(sampleSprite, splArray[i * cols + j]);
                sampleSprite.graphics.endFill();
                if (w * rows > 1000) {
                    sampleSprite.scaleX = 1000 / (w * rows);
                    sampleSprite.scaleY = 1000 / (w * rows)
                }
                sampleSprite.x = 2 * j;
                sampleSprite.y = 2 * i;
                //标识每块的唯一性 用来检测碰撞
                sampleSprite.id=i.toString()+j.toString();
                dragContainer_mc.addChild(sampleSprite);
                sampleSprite.filters = filterArray;
                spArray.push(sampleSprite);
                sampleSprite.addEventListener(MouseEvent.MOUSE_DOWN, onDown);
                 
            }
        }
         
        for (i = 0; i < rows; i++) {
            for (j = 0; j < cols; j++) {
                bitmap.draw(_loader);
                sampleSprite = new MovieClip();
                sampleSprite.graphics.lineStyle();
                sampleSprite.graphics.beginBitmapFill(bitmap);
                myDraw(sampleSprite, splArray[i * cols + j]);
                sampleSprite.graphics.endFill();
                if (w * rows > 1000) {
                    sampleSprite.scaleX = 1000 / (w * rows);
                    sampleSprite.scaleY = 1000 / (w * rows)
                }
                sampleSprite.x = 2 * j;
                sampleSprite.y = 2 * i;
                hitContainer_mc.addChild(sampleSprite);
                sampleSprite.filters = filterArray;    
                //标识每块的唯一性 用来检测碰撞
                hit_Object[i.toString()+j.toString()]=sampleSprite;
                 
            }
        }
        //被碰撞的拼图
        hitContainer_mc.alpha=0;
         
         
        //原图
        var bitmap_yuantu: BitmapData = new BitmapData(_loader.width, _loader.height);
        bitmap_yuantu.draw(_loader);
        var bitmap_yuantuBM=new Bitmap(bitmap_yuantu);
        var scaleNum=2 * cols/bitmap_yuantuBM.width+1;
        bitmap_yuantuBM.scaleX =scaleNum;
        bitmap_yuantuBM.scaleY =scaleNum;
        yuantuContainer_mc.addChild(bitmap_yuantuBM);
        bitmap_yuantuBM.filters = filterArray;
         
    }
    //cuplayer.com画图函数
    function myDraw(sprite: Sprite, ms: Object) {
        i = ms.row;
        j = ms.col;
        sprite.graphics.drawRoundRect(j * w, i * h, w, h, 5, 5);
        if (ms.right) {
            sprite.graphics.moveTo(w * (j + 1), i * h);
            sprite.graphics.curveTo(w * (j + 1) - curWidth, i * h + h / 2, w * (j + 1), (i + 1) * h);
            sprite.graphics.drawEllipse(w * (j + 1) - 0.5 * curWidth, i * h + 0.5 * h - 0.5 * ellipseA, ellipseB, ellipseA);
        } else if (j < (cols-1)) {
            sprite.graphics.moveTo(w * (j + 1), i * h);
            sprite.graphics.curveTo(w * (j + 1) + curWidth, i * h + h / 2, w * (j + 1), (i + 1) * h);
            sprite.graphics.drawEllipse(w * (j + 1) + 0.5 * curWidth - ellipseB, i * h + 0.5 * h - 0.5 * ellipseA, ellipseB, ellipseA);
        }
        if (ms.left) {
            sprite.graphics.moveTo(w * j, i * h);
            sprite.graphics.curveTo(w * j + curWidth, i * h + h / 2, w * j, (i + 1) * h);
            sprite.graphics.drawEllipse(w * j + 0.5 * curWidth - ellipseB, i * h + 0.5 * h - 0.5 * ellipseA, ellipseB, ellipseA);
        } else if (j > 0) {
            sprite.graphics.drawEllipse(w * j - 0.5 * curWidth, i * h + 0.5 * h - 0.5 * ellipseA, ellipseB, ellipseA);
            sprite.graphics.moveTo(w * j, i * h);
            sprite.graphics.curveTo(w * j - curWidth, i * h + h / 2, w * j, (i + 1) * h);
        }
        if (ms.down) {
            sprite.graphics.moveTo(w * j, (i + 1) * h);
            sprite.graphics.curveTo(w * j + 0.5 * w, (i + 1) * h - curWidth, (j + 1) * w, (i + 1) * h);
            sprite.graphics.drawEllipse(w * j + 0.5 * w - 0.5 * ellipseA, (i + 1) * h - 0.5 * curWidth, ellipseA, ellipseB);
        } else if (i < (cols-1)) {
            sprite.graphics.moveTo(w * j, (i + 1) * h);
            sprite.graphics.curveTo(w * j + 0.5 * w, (i + 1) * h + curWidth, (j + 1) * w, (i + 1) * h);
            sprite.graphics.drawEllipse(w * j + 0.5 * w - 0.5 * ellipseA, (i + 1) * h + 0.5 * curWidth - ellipseB, ellipseA, ellipseB);
        }
        if (ms.up) {
            sprite.graphics.moveTo(w * j, i * h);
            sprite.graphics.curveTo(w * j + 0.5 * w, i * h + curWidth, (j + 1) * w, i * h);
            sprite.graphics.drawEllipse(w * j + 0.5 * w - 0.5 * ellipseA, i * h + 0.5 * curWidth - ellipseB, ellipseA, ellipseB);
        } else if (i > 0) {
            sprite.graphics.moveTo(w * j, i * h);
            sprite.graphics.curveTo(w * j + 0.5 * w, i * h - curWidth, (j + 1) * w, i * h);
            sprite.graphics.drawEllipse(w * j + 0.5 * w - 0.5 * ellipseA, i * h - 0.5 * curWidth, ellipseA, ellipseB);
        }
    }
     
    //cuplayer.com拖曳处理函数
    function onDown(e: MouseEvent) {
        //获取当前被拖动 的对象
        nowDrag_mc=MovieClip(e.currentTarget);
        nowDrag_mc.startDrag();
        stage.addEventListener(MouseEvent.MOUSE_UP, onUp);
    }
    function onUp(e: MouseEvent) {
        stage.removeEventListener(MouseEvent.MOUSE_UP, onUp);
        nowDrag_mc.stopDrag();
    }
    转载自:https://www.cnblogs.com/dt1991/p/12560351.html

      

  • 相关阅读:
    武汉大学2020年数学分析考研试题
    南开大学2020年数学分析考研试题
    南开大学2020年高等代数考研试题
    华中科技大学2020年数学分析考研试题
    华南理工大学2020年数学分析考研试题
    华东师范大学2020年数学分析考研试题
    华东师范大学2020年高等代数考研试题
    哈尔滨工业大学2020年数学分析考研试题
    大连理工大学2020年高等代数考研试题
    大连理工大学2020年数学分析考研试题
  • 原文地址:https://www.cnblogs.com/fengziwu/p/15012162.html
Copyright © 2011-2022 走看看