• [ActionScript 3.0] 框选裁剪


      1 package 
      2 {
      3     import flash.display.Bitmap;
      4     import flash.display.BitmapData;
      5     import flash.display.Loader;
      6     import flash.display.Shape;
      7     import flash.display.Sprite;
      8     import flash.events.Event;
      9     import flash.events.MouseEvent;
     10     import flash.geom.Point;
     11     import flash.geom.Rectangle;
     12     import flash.net.URLRequest;
     13     import flash.utils.ByteArray;
     14 
     15     /**
     16       * ...
     17       * @author Frost.Yen
     18       */
     19     public class CutOut extends Sprite
     20     {
     21         private var ldr:Loader;
     22         private var cutContainer:Sprite;//存放裁剪的图片的容器
     23         private var primitiveContainer:Sprite;//存放原始图片的容器
     24         private var frame:Shape;//裁剪框
     25         private var downPoint:Point=new Point();
     26         private var bytearr:ByteArray=new ByteArray();
     27 
     28 
     29         public function CutOut():void
     30         {
     31             init();
     32         }
     33 
     34         private function init():void
     35         {
     36             this.graphics.beginFill(0xcccccc);
     37             this.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
     38             this.graphics.endFill();
     39 
     40             cutContainer = new Sprite();
     41             primitiveContainer = new Sprite();
     42             frame = new Shape();
     43 
     44             cutContainer.x = 400;
     45 
     46             this.addChild(primitiveContainer);
     47             this.addChild(cutContainer);
     48             this.addChild(frame);
     49 
     50             ldr = new Loader();
     51             ldr.load(new URLRequest("http://hiphotos.baidu.com/frostyen/pic/item/7e49d8b53f6b48ffd9335aa2.jpg"));
     52             ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
     53             primitiveContainer.addChild(ldr);
     54             this.addEventListener(MouseEvent.MOUSE_DOWN, onStageDown);
     55             stage.addEventListener(MouseEvent.MOUSE_UP, onStageUp);
     56         }
     57         private function onStageDown(e:MouseEvent):void
     58         {
     59             while (cutContainer.numChildren>0)
     60             {
     61                 cutContainer.removeChildAt(0);
     62             }
     63 
     64             downPoint.x = mouseX;
     65             downPoint.y = mouseY;
     66             frame.graphics.clear();
     67             primitiveContainer.addEventListener(MouseEvent.MOUSE_MOVE,onMove);
     68         }
     69 
     70         private function onMove(e:MouseEvent):void
     71         {
     72             frame.graphics.clear();
     73             frame.graphics.lineStyle(1,0xff00ff);
     74             frame.graphics.drawRect(0, 0, mouseX - downPoint.x, mouseY - downPoint.y);
     75             frame.x = downPoint.x;
     76             frame.y = downPoint.y;
     77         }
     78 
     79         private function onStageUp(e:MouseEvent):void
     80         {
     81             primitiveContainer.removeEventListener(MouseEvent.MOUSE_MOVE,onMove);
     82             if (frame.width != 0)
     83             {
     84                 var bmpd1:BitmapData = new BitmapData(primitiveContainer.width,primitiveContainer.height);
     85                 bmpd1.draw(primitiveContainer);
     86                 bytearr = bmpd1.getPixels(new Rectangle(frame.x,frame.y,frame.width,frame.height));
     87                 bytearr.position = 0;
     88                 var bmpd2:BitmapData = new BitmapData(frame.width,frame.height);
     89                 try
     90                 {
     91                     bmpd2.setPixels(new Rectangle(0,0,frame.width,frame.height),bytearr);
     92                 }
     93                 catch (err:Error)
     94                 {
     95                     trace(err.message);//若裁剪框拉的范围超出原始图像范围会报此错,若解决,需深究.
     96                     frame.graphics.clear();
     97                     return;
     98                 }
     99                 var bmp:Bitmap = new Bitmap(bmpd2);
    100                 cutContainer.addChild(bmp);
    101             }
    102 
    103         }
    104 
    105         private function onComplete(e:Event):void
    106         {
    107             ldr.scaleX = ldr.scaleY = 0.6;
    108         }
    109 
    110     }
    111 
    112 }
  • 相关阅读:
    批量修改mp3文件播放速度
    尝试了一下alsa录音播放的编程。
    最快速获取天气的方法
    乒乓Buffer
    GCC编译选项和环境变量
    Linux发行版本
    memcpy 和 memmove
    自动定位android ndk的路径
    记一下,安装和使用Ubuntu过程中遇到的问题
    Android API 和Android 版本对照
  • 原文地址:https://www.cnblogs.com/frost-yen/p/4589296.html
Copyright © 2020-2023  润新知