2012-06-27 3 views
2

J'essaie de lire une image en utilisant Loader (nom de la variable est faceimage) et en essayant de transmettre les données bitmap de cette image à une fonction appelée détecter. Cependant, il échoue dans la ligne où j'essaye d'obtenir le Bitmap. Je ai réduit à cette ligne en mettant des instructions de suivi au-dessus et en dessous de la ligne défaillante. Le visageImage contient des données valides que j'ai vérifiées en affichant le contenu à l'écran. J'ai également essayébitmapdata.draw échoue silencieusement

bmpTarget = Bitmap(BitmapData(faceImage.content)) 

mais en vain. Est-ce que je fais quelque chose de mal ici?

Répondre

1

Cela peut être un problème de sandbox/crossdomain. Certains paramètres de domaines croisés interdisent de dessiner le contenu d'une image chargée dans un bitmapData. Vous pouvez contourner le problème en chargeant les données d'image brutes avec URLLoader, puis en utilisant loadBytes sur Loader.

+0

Je suis en train de charger réellement l'image de mon système de fichiers local au moment. Est-ce que les problèmes de crossdomain surgiront toujours? J'ai essayé ce morceau de code, mais il semble toujours être un échec. –

1

Comme il ressort de: Why do Loader objects kill bitmapdata draw();?

Vous devez probablement LoaderContext.

loader.load("http://www.example.com/myimage.jpg", new LoaderContext(true)); 

Sinon, vous pouvez charger des images à partir d'autres sites, mais pas accéder à la bitmapData réelle, qu'un draw() exige.

+0

Je charge actuellement l'image de mon système de fichiers local pour le moment. J'ai essayé ce morceau de code, mais il ne semble toujours pas fonctionner :-( –

1

Je me demande si vous essayez d'accéder aux données bitmap avant qu'elles aient été chargées?

Peut-être essayer l'aide d'un auditeur complet ...

var _urlRequest:URLRequest = new URLRequest("urlToImage"); 
var faceImage:Loader = new Loader; 
faceImage.load(_urlRequest); 
faceImage.addEventListener(IOErrorEvent.IO_ERROR, function(e:IOErrorEvent):void{ trace(e) }); 
faceImage.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded, false, 0, true); 

function imageLoaded(e:Event):void { 

faceImage.contentLoaderInfo.removeEventListener(Event.COMPLETE, imageLoaded); 
var bmpTarget:Bitmap = e.target.content; 
detector.detect(bmpTarget.bitmapData); 
} 
Questions connexes