AS3 Image Loader - загружается сам (swf)
Мой LoaderInfo вернет сам SWF, а не изображение, данное через FileReference и Loader. У меня были проблемы с его отладкой, так как LoaderInfo.content возвращает [Object Main] (Мой класс документа). После расследования я обнаружил, что LoaderInfo.content является SWF-файлом, согласно contentType.
Проблема в том, что ссылка на файл для изображения правильная (это изображение, а не SWF).
Мой код:
private function onAction(e:MouseEvent){
if(e.currentTarget.name == 0){
myFileReference = new FileReference();
myFileReference.browse(getTypes());
myFileReference.addEventListener(Event.SELECT, loadedImage);
myFileReference.addEventListener(Event.COMPLETE, loadImage15);
}
}
private function loadedImage(e:Event){
var imgHolder:ImageHolder = Main.imageHolder;
while(imgHolder.numChildren > 0){
imgHolder.removeChild(imgHolder.getChildAt(0));
}
myFileReference.load();
}
private function loadImage15(e:Event){
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadImg2);
loader.loadBytes(myFileReference.data);
trace(myFileReference.type); // .JPG
}
private function loadImg2(e:Event){
var lInfo:LoaderInfo = (e.target as LoaderInfo); //e.target is indeed LoaderInfo
lInfo.removeEventListener(Event.COMPLETE, loadImg2);
trace(loaderInfo.contentType); //application/x-shockwave-flash
var newSprite:MovieClip = loaderInfo.content as MovieClip;
Main.imageHolde.addChild(newSprite); //Error as you can't addChild Main to Main
}
private function getTypes():Array {
return [new FileFilter("Images","*.jpg;*.jpeg;*.gif;*.png")];
}
2 ответа
РЕДАКТИРОВАТЬ
У меня изначально был очень сложный ответ - который был неправильным...
У вас просто есть ошибка в вашей программе:
// here you reference the Loader's contentLoaderInfo
var lInfo:LoaderInfo = (e.target as LoaderInfo);
lInfo.removeEventListener(Event.COMPLETE, loadImg2);
// but from here on out, you reference your parent class' "loaderInfo" property!
trace(loaderInfo.contentType);
var newSprite:MovieClip = loaderInfo.content as MovieClip; // <- this is your Main class!
Main.imageHolde.addChild(newSprite); //Error as you can't addChild Main to Main
+ Изменить loaderInfo
в lInfo
и у тебя все будет хорошо.
Я спрашиваю об этой проблеме раньше: загрузка изображения с помощью Loader.loadBytes(byteArray)
Никто не знает:]
Если Вы загрузите байты изображения с помощью Loader, Вы получите:
Loader.content is MovieClip
Loader.content.getChildAt(0) is Bitmap