Files
haxework/src/main/haxework/net/ExternalImageLoader.hx
2015-07-14 12:01:51 +03:00

60 lines
1.7 KiB
Haxe
Executable File

package haxework.net;
import haxework.net.callback.ICallback;
import flash.system.Security;
import flash.utils.ByteArray;
import flash.display.LoaderInfo;
import flash.display.Loader;
import flash.display.Bitmap;
import flash.events.Event;
import flash.display.BitmapData;
class ExternalImageLoader extends BaseMediaLoader<BitmapData> {
private var internalLoader:InternalLoader;
override private function extrudeResult(e:Event):BitmapData {
var loader:Loader = cast(e.currentTarget, LoaderInfo).loader;
#if flash
if (Security.sandboxType == Security.APPLICATION) {
var content:Bitmap = cast(loader.content,Bitmap);
return content.bitmapData;
} else {
#end
internalLoader = new InternalLoader();
internalLoader.fromBytes(loader.contentLoaderInfo.bytes)
.success(function(data:BitmapData):Void {
var c:ICallback<BitmapData> = callback;
dispose();
c.callSuccess(data);
})
.fail(function(error:Dynamic):Void {
var c:ICallback<BitmapData> = callback;
dispose();
c.callFail(e);
});
return null;
#if flash} #end
}
override public function dispose():Void {
super.dispose();
if (internalLoader != null) {
internalLoader.dispose();
internalLoader = null;
}
}
}
class InternalLoader extends BaseMediaLoader<BitmapData> {
override private function extrudeResult(e:Event):BitmapData {
var loader:Loader = cast(e.currentTarget, LoaderInfo).loader;
var bitmapData:BitmapData = new BitmapData(Math.round(loader.width), Math.round(loader.height), true, 0x00000000);
bitmapData.draw(loader);
loader.unloadAndStop();
return bitmapData;
}
}