Home > Flash | WEB > Flex3 画像をロードして選択範囲を切り出し

Flex3 画像をロードして選択範囲を切り出し

仕事でFlex画面内で画像をコピー、ペーストするようなのが必要になったので、
とりあえずデモを作ってみた。

BitmapDataのdrawメソッドで、元画像データの一部を切り出すことができます。

ACTIONSCRIPT:
  1. private function sliceImage(x:Number, y:Number, width:Number, height:Number):void {
  2.     var rect:Rectangle = new Rectangle(0, 0, width, height);
  3.     var matrix:Matrix = new Matrix();
  4.     matrix.tx = -x;
  5.     matrix.ty = -y;
  6.     var bitmap_data:BitmapData = new BitmapData(width, height, true);
  7.     bitmap_data.draw(img, matrix, new ColorTransform(), "normal", rect, true);
  8.     var bitmap:Bitmap = new Bitmap(bitmap_data);
  9.     this.img2.load(bitmap);
  10. }

↓以下デモとmxml

リストから画像ファイルを選んで表示、
そのあと画像をマウスで範囲選択するとその部分が下のボックスに切り出されます。

あんまりおもしろくないね、このデモ(^-^;;

↓ mxml

ACTIONSCRIPT:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="604" height="680" creationComplete="init()">
  3.     <mx:DataGrid x="10" y="10" width="586" height="112" id="imageList" change="imageListChangeHandler(event)">
  4.         <mx:columns>
  5.             <mx:DataGridColumn headerText="読み込みファイル" dataField="col1"/>
  6.         </mx:columns>
  7.     </mx:DataGrid>
  8.     <mx:HBox x="10" y="130" width="586" height="353" backgroundAlpha="1.0" backgroundColor="#FDFDFD" id="imageBox">
  9.         <mx:Image id="img"/>
  10.     </mx:HBox>
  11.     <mx:Canvas width="566" height="333" id="slice_area" x="10" y="130">
  12.     </mx:Canvas>
  13.     <mx:ProgressBar x="206" y="247" id="imageProgress" enabled="true" mode="manual" visible="false"/>
  14.     <mx:HBox x="10" y="491" width="586" height="175" backgroundColor="#FFFEFE">
  15.         <mx:Image id="img2"/>
  16.     </mx:HBox>
  17.     <mx:Script>
  18.         <![CDATA[
  19.             import mx.core.UIComponent;
  20.             import mx.controls.Alert;
  21.             import mx.events.ListEvent;
  22.             private var file_list:Array;
  23.             private var loader:Loader;
  24.             private var slice_sprite:Sprite;
  25.             private var startPt:Object;
  26.            
  27.             private function init():void{
  28.                 this.file_list = new Array("/samples/images/2663645863_0076b0f36a.jpg","/samples/images/2709117278_0ac9f695ab.jpg","/samples/images/2690301784_e553e64940.jpg");
  29.                 this.imageList.dataProvider = this.file_list;
  30.                
  31.                 this.slice_sprite = new Sprite;
  32.                 var ui_obj:UIComponent = new UIComponent;
  33.                 ui_obj.addChild(slice_sprite);
  34.                 this.slice_area.addChild(ui_obj);
  35.             }
  36.            
  37.             private function imageListChangeHandler(event:ListEvent):void{
  38.                 var url:String = this.imageList.selectedItem.toString();
  39.  
  40.                 var request:URLRequest = new URLRequest(url);
  41.            
  42.                 try {
  43.                     this.loader = new Loader;
  44.                     this.imageProgress.visible = true
  45.                     var loader_info:LoaderInfo = loader.contentLoaderInfo;
  46.                     loader_info.addEventListener(ProgressEvent.PROGRESS, progressHandler);
  47.                     loader_info.addEventListener(Event.COMPLETE, completeHandler);
  48.                     this.loader.load(request);
  49.                 } catch (error:Error) {
  50.                     mx.controls.Alert.show("load error:" + error.message);
  51.                     // (-_-;;
  52.                 }
  53.                 img.addEventListener(MouseEvent.MOUSE_DOWN, imageMouseDownHandler);
  54.                 //img.addEventListener(MouseEvent.MOUSE_UP, imageMouseUpHandler);
  55.                 //slice_sprite.addEventListener(MouseEvent.MOUSE_UP, imageMouseUpHandler);
  56.                 this.addEventListener(MouseEvent.MOUSE_UP, imageMouseUpHandler);
  57.  
  58.  
  59.  
  60.  
  61.  
  62.                 img.addEventListener(Event.ENTER_FRAME, imageEnterFrameHandler);
  63.             }
  64.            
  65.             private function progressHandler(event:ProgressEvent):void {
  66.                 this.imageProgress.setProgress(event.bytesLoaded,event.bytesTotal);
  67.             }
  68.             
  69.             private function completeHandler(event:Event):void {
  70.                 this.imageProgress.visible = false;
  71.                 var aloader:Loader = LoaderInfo(event.currentTarget).loader;
  72.                 var bitmap:Bitmap = event.target.content as Bitmap;
  73.                 this.slice_sprite.graphics.clear();
  74.              this.img.load(bitmap);
  75.            }
  76.            
  77.            private function imageMouseDownHandler(event:Event):void{
  78.               slice_sprite.graphics.clear();
  79.                 startPt = new Object;
  80.                 startPt.x = img.mouseX;
  81.                 startPt.y = img.mouseY;
  82.                 img.addEventListener(Event.ENTER_FRAME,imageEnterFrameHandler);   
  83.            }
  84.            
  85.            private function imageMouseUpHandler(event:Event):void{
  86.               img.removeEventListener(Event.ENTER_FRAME,imageEnterFrameHandler);
  87.               
  88.               var startX:Number = startPt.x;
  89.               var startY:Number = startPt.y;
  90.               var width:Number;
  91.               var height:Number;
  92.               
  93.               if(img.mouseX <startPt.x){
  94.                  width = startPt.x - img.mouseX;
  95.                  startX = img.mouseX;
  96.               }else{
  97.                  width = img.mouseX - startPt.x;
  98.               }
  99.               
  100.               if(img.mouseY <startPt.y){
  101.                  height = startPt.y - img.mouseY;
  102.                  startY = img.mouseY;
  103.               }else{
  104.                  height = img.mouseY - startPt.y;
  105.               }
  106.               
  107.               sliceImage( startX, startY, width, height );
  108.            }
  109.            
  110.            private function imageEnterFrameHandler(event:Event):void{
  111.               slice_sprite.graphics.clear();
  112.               slice_sprite.graphics.lineStyle(2, 0xFF6666);
  113.               var toX:Number = img.mouseX;
  114.               var toY:Number = img.mouseY;
  115.               if(toX <0) toX = 0;
  116.               else if(toX> img.width) toX = img.width;
  117.               if(toY <0) toY = 0;
  118.               else if(toY> this.imageBox.height) toY = this.imageBox.height;
  119.               else if(toY> img.height) toY = img.height;
  120.               
  121.               slice_sprite.graphics.moveTo(startPt.x, startPt.y);
  122.               slice_sprite.graphics.lineTo(toX, startPt.y);
  123.               slice_sprite.graphics.lineTo(toX, toY);
  124.               slice_sprite.graphics.lineTo(startPt.x, toY);
  125.               slice_sprite.graphics.lineTo(startPt.x, startPt.y);
  126.            }
  127.            
  128.            private function sliceImage(x:Number, y:Number, width:Number, height:Number):void {
  129.                 var rect:Rectangle = new Rectangle(0, 0, width, height);
  130.                 var matrix:Matrix = new Matrix();
  131.                 matrix.tx = -x;
  132.                 matrix.ty = -y;
  133.                 var bitmap_data:BitmapData = new BitmapData(width, height, true);
  134.                 bitmap_data.draw(img, matrix, new ColorTransform(), "normal", rect, true);
  135.                 var bitmap:Bitmap = new Bitmap(bitmap_data);
  136.                 this.img2.load(bitmap);
  137.            }
  138.            
  139.         ]]>
  140.     </mx:Script>
  141. </mx:Application>

Comments:0

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://parpue.net/web/314/trackback
Listed below are links to weblogs that reference
Flex3 画像をロードして選択範囲を切り出し from parpue.net

Home > Flash | WEB > Flex3 画像をロードして選択範囲を切り出し

リンク
chocolataste-planner
millon

サーチ
Feeds
Meta
blog ranking ブログランキング・にほんブログ村へ
にほんブログ村 テクノラティのお気に入りに追加する

Return to page top