Skip to main content
Participating Frequently
June 21, 2013
Question

convert ios photo(mediapromise) into byteArray ?

  • June 21, 2013
  • 1 reply
  • 866 views

hello

I'm trying to convert ios photo into bytearray. Because I want send the photo from iphone to AIR in laptop.

I've found some tutorial looks great and should work:

http://forums.adobe.com/post!input.jspa?container=4434&containerType=14

the method is to use "mediaPromise.open()" and get the byte data.

but I always got an error blow:

ArgumentError: Error #1063: Argument count mismatch on Main/selectHandler(). Expected 0, got 1.

dose anyone bump into the same error as me?

my code is below:

package

{

          import flash.display.Sprite;

          import flash.events.Event;

          import flash.events.IEventDispatcher;

          import flash.events.MediaEvent;

          import flash.events.MouseEvent;

          import flash.media.CameraRoll;

          import flash.media.MediaPromise;

          import flash.utils.ByteArray;

          import flash.utils.IDataInput;

          public class Main extends Sprite

          {

                    public var dataSource:IDataInput;

                    public var cameraRoll:CameraRoll=new CameraRoll();

                    public var but_select:Sprite=new Sprite()

                    public function Main()

                    {

                              super();

                              but_select.graphics.beginFill(0xFF0000)

                              but_select.graphics.drawCircle(stage.stageWidth / 2, stage.stageHeight / 2, 50)

                              addChild(but_select)

                              but_select.addEventListener(MouseEvent.CLICK, selectHandler)

                    }

                    public function selectHandler():void

                    {

                              if (CameraRoll.supportsBrowseForImage)

                              {

                                        cameraRoll.addEventListener(MediaEvent.SELECT, imageSelected);

                                        cameraRoll.browseForImage();

                              }

                               else

                              {

                                trace("Image browsing is not supported on this device.");

                              }

                    }

                    private function imageSelected(event:MediaEvent):void

                    {

                            trace("Media selected...");

                              var imagePromise:MediaPromise=event.data;

                              dataSource=imagePromise.open();

                              if (imagePromise.isAsync)

                              {

                              trace("Asynchronous media promise.");

                                        var eventSource:IEventDispatcher=dataSource as IEventDispatcher;

                                        eventSource.addEventListener(Event.COMPLETE, onMediaLoaded);

                              }

                               else

                              {

                                          trace("Synchronous media promise.");

                                        readMediaData();

                              }

                    }

                    private function onMediaLoaded(event:Event):void

                    {

                              trace("Media load complete");

                              readMediaData();

                    }

                    private function readMediaData():void

                    {

                              var imageBytes:ByteArray=new ByteArray();

                              dataSource.readBytes(imageBytes);

                              trace("imageBytes= " + imageBytes)

                    }

          }

}

This topic has been closed for replies.

1 reply

Participating Frequently
June 21, 2013

it's wierd but the code below is working:

package

{

          import flash.desktop.NativeApplication;

          import flash.display.Loader;

          import flash.display.Sprite;

          import flash.display.StageAlign;

          import flash.display.StageScaleMode;

          import flash.display.graphics;

          import flash.events.ErrorEvent;

          import flash.events.Event;

          import flash.events.IEventDispatcher;

          import flash.events.IOErrorEvent;

          import flash.events.MediaEvent;

          import flash.events.MouseEvent;

          import flash.media.CameraRoll;

          import flash.media.MediaPromise;

          import flash.utils.ByteArray;

          import flash.utils.IDataInput;

 

          public class Main extends Sprite

          {

                    private var cameraRoll:CameraRoll = new CameraRoll();

                    public var ball:Sprite=new Sprite()

                    private var dataSource:IDataInput;

                    private var eventSource:IEventDispatcher;

 

 

                    public function Main()

                    {

                              this.stage.align = StageAlign.TOP_LEFT;

                              this.stage.scaleMode = StageScaleMode.NO_SCALE;

 

                              ball.graphics.beginFill(0xFF0000)

                              ball.graphics.drawCircle(stage.stageWidth/2,stage.stageHeight/2,50)

                              addChild(ball)

 

                              ball.addEventListener(MouseEvent.CLICK,selectHander)

 

                    }

 

 

                    private function selectHander(e:MouseEvent):void

                    {

 

                              if( CameraRoll.supportsBrowseForImage )

                              {

  trace( "Initializing app..." );

 

                                        cameraRoll.addEventListener( MediaEvent.SELECT, imageSelected );

                                        cameraRoll.addEventListener( Event.CANCEL, browseCanceled );

                                        cameraRoll.addEventListener( ErrorEvent.ERROR, mediaError );

                                        cameraRoll.browseForImage();

                              }

  else

                              {

  trace( "Image browse is not supported.");

                              }

 

                    }

 

                    private function imageSelected( event:MediaEvent ):void

                    {

  trace( "Media selected..." );

 

                              var imagePromise:MediaPromise = event.data;

                              dataSource = imagePromise.open();

 

                              if( imagePromise.isAsync )

                              {

  trace( "Asynchronous media promise." );

                                        eventSource = dataSource as IEventDispatcher;

                                        trace( eventSource );

 

                                        eventSource.addEventListener( Event.COMPLETE, onDataComplete );               

                              }

  else

                              {

  trace( "Synchronous media promise." );

                                        readMediaData();

                              }

                    }

 

                    private function onDataComplete( event:Event ):void

                    {

  trace("Data load complete");

                              readMediaData();

                    }

 

                    private function browseCanceled( event:Event ):void

                    {

  trace( "Media select canceled." );

                              NativeApplication.nativeApplication.exit();

                    }

 

                    private function readMediaData():void

                    {

  trace("Main.readMediaData()");

 

 

                              var imageBytes:ByteArray = new ByteArray();

                              dataSource.readBytes( imageBytes );

                              trace("imageBytes= "+imageBytes)

 

  //the rest of this is just testing what we actually read

//                              trace(imageBytes.length);

//                              imageBytes.position = 0;

//                              var string:String = imageBytes.readUTFBytes( 300 );

//                              trace( string );

                    }

 

                    private function mediaError( error:ErrorEvent ):void

                    {

                              trace( "Error:" + error.text );

                              NativeApplication.nativeApplication.exit();

                    }

 

          }

}