2011-04-04 9 views
0

イメージをキャンバスにドロップすると、イメージにnativePathを取得できますが、必要なビットマップデータは取得できません。Flex Air AS3でドロップされたイメージからビットマップデータを取得できません

ファイルプロパティを調べると、デバッグモードでデータはNULLに設定されます。

私はここで間違っていますか?私のコードではfile.dataは私に何も与えません。

protected function creationCompleteHandler(event:FlexEvent):void 
{ 
    this.addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER,onDragIn); 
    this.addEventListener(NativeDragEvent.NATIVE_DRAG_DROP,onDrop); 
    NativeDragActions.COPY; 
} 

     private function onDrop(e:NativeDragEvent):void 
     { 
      trace("Dropped!"); 

      var dropfiles:Array = e.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array; 
      for each (var file:File in dropfiles){ 
       switch (file.extension.toLowerCase()){ 
        case "png" : 
         trace('png'); 
         //resizeImage(file.nativePath); 
         break; 
        case "jpg" : 
         trace('jpg'); 
         //resizeImage(file.nativePath); 
         break; 
        case "jpeg" : 
         trace('jpeg'); 
         //resizeImage(file.nativePath); 
         break; 
        case "gif" : 
         resizeImage(file.nativePath); 
         break; 
        default: 
         Alert.show("choose an image file!"); 
       } 
      } 
     } 

答えて

0

まず、あなたがたByteArrayロードする必要があります。次の

var ba:ByteArray = new ByteArray(); 
var stream:FileStream = new FileStream(); 
stream.open(file, FileMode.READ); 
stream.readBytes(ba); 
stream.close(); 

を、使用してビットマップをロードする:最終的

var loader:Loader = new Loader(); 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, fileLoaded); 
loader.loadBytes(ba); 

を、ビットマップを取得

private function fileLoaded(event:Event):void { 
    var bitmap:Bitmap = Bitmap(event.target.content); 

    // finally you have: bitmap.bitmapData 

    // cleanup 
    loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, fileLoaded); 
} 
関連する問題