Question

I have this code were I take from a external XML file a Link of an Image load it with ...

<mx:Label
id="textboxLink" text=""/>

private function loadRemoteImg(url:String):void { 

textboxLink.text
.....
loader, completeHandler etc.

Save Image(), with ByteArray, JPEGEcoder and then to the location - filestream etc.

This works all fine yet it is only possible (due to supposedly Flash Player 10 onwards) by MouseEvent so of a Click of a button!

As mentioned it works all fine, but I really would need this to activate on start up like in a creationComplete or else!

Any help or any ideas would be appriciated! regards aktell

No correct solution

OTHER TIPS

Ah, sorry, I thought you were just trying to load the image; I didn't see that you were trying to save it as well.

For both of the following cases, you'll need to load the image as Binary:

var urlLoader:URLLoader = new URLLoader(new URLRequest( myURL ));
urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
...

This is because if we load it normally (using a Loader), then what we'll get is a Bitmap object, i.e. Flash's representation of your image, rather than the jpg/png data itself. Loading it using this method will give you a ByteArray when it's loaded.

If you're using AIR, you should be able to use the FileStream class: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/filesystem/FileStream.html

Something like:

// NOTE: you can use any of the other File constants to get your path (e.g.
// documentsDirectory, desktopDirectory...
// myImageFileName is the name of your image, e.g. "myPic.jpg"
var file:File       = File.applicationStorageDirectory.resolvePath( myImageFileName );
var fs:FileStream   = new FileStream;
try
{
    fs.open( file, FileMode.WRITE );
    fs.writeBytes( imageBinaryData ); // imageBinaryData is a ByteArray
    fs.close();
}
catch ( e:Error )
{
    trace( "Can't save image: " + e.errorID + ": " + e.name + ": " + e.message );
}

If you're using Flash, then the only way you can save something without user interaction, is through a SharedObject. This will mean that you data won't be available outside the app (it'll be a .sol file), but depending on how you're doing it, this might not be a problem.

// get our shared object - if you're saving a lot of images, then you might need another shared
// object, whose name you know, that stores the names of the other images
var so:SharedObject = null;
try { so = SharedObject.getLocal( this.m_name ); }
catch ( e:Error )
{
    trace( "Couldn't get shared object: " + e.errorID + ": " + e.name + ": " + e.message );
    return;
}

// NOTE: it's possible you may need a registerClassAlias on the ByteArray before this
so.data["image"] = imageBinaryData;

// save the lso
try { so.flush( minDiskSpace ); }
catch ( e:Error )
{
    trace( "Couldn't save the lso: " + e.errorID + ": " + e.name + ": " + e.message );
}

To actually use your image later, load your file(in binary mode)/get your SharedObject, and convert the saved binary to an image:

var l:Loader = new Loader;
l.contentLoaderInfo.addEventListener( Event.COMPLETE, this._onConvertComplete ); // you could probably also listen for the IO_ERROR event
try
{
    // NOTE: you can pass a LoaderContext to the loadBytes methods
    l.loadBytes( imageBinaryData );
}
catch( e:Error )
{
    trace( "Couldn't convert image: " + e.errorID + ": " + e.name + ": " + e.message );
}

...

// called when our loader has finished converting our image
private function _onConvertComplete( e:Event ):void
{
    // remove the event listeners
    var loaderInfo:LoaderInfo = ( e.target as LoaderInfo );
    loaderInfo.removeEventListener( Event.COMPLETE, this._onConvertComplete );

    // get our image
    var bitmap:Bitmap = loaderInfo.content;
    this.addChild( bitmap );
}

If you can't use any of those methods, then you're going to have to have some sort of user interaction (e.g. mouse click). (Out of curiosity, have you tried just dispatching a MouseEvent.CLICK on the relevant object, to see if it would work?)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top