2012-06-27 5 views
2

Я пытаюсь прочитать изображение с помощью Loader (имя переменной - faceimage) и пытается передать битмапдаты этого изображения функции, называемой обнаружением. Однако он не работает в строке, где я пытаюсь получить битмап.bitmapdata.draw не работает молча

bmpTarget = new Bitmap(new BitmapData(faceImage.width, faceImage.height, false)) 
    bmpTarget.bitmapData.draw(faceImage); // Fails, no errors shown 
    detector.detect(bmpTarget.bitmapData); 

Я сузился до этой строки, разместив инструкции следов выше и ниже линии сбоя. FaceImage содержит достоверные данные, которые я проверил, отображая содержимое на экране. Я также пробовал

bmpTarget = Bitmap(BitmapData(faceImage.content)) 

но зря. Я здесь что-то не так?

ответ

1

Это может быть проблема с песочницей/crossdomain. Некоторые настройки crossdomain запрещают рисовать содержимое загруженного изображения в bitmapData. Вы можете обойти его, загрузив необработанные данные изображения URLLoader, а затем используя loadBytes на Loader.

+0

Я на самом деле загружается изображение из моей локальной файловой системе в данный момент. Проблемы с перекрестными доменами все еще возникают? Я пробовал этот кусок кода, но он все еще кажется неудачным. –

1

Как видно из: Why do Loader objects kill bitmapdata draw();?

Вы, вероятно, потребуется LoaderContext.

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

В противном случае, вы можете загрузить изображения с других сайтов, но не получить доступ к фактической BitmapData, которую draw() требует.

+0

Фактически я загружаю изображение из своей локальной файловой системы. Я пробовал этот кусок кода, но он все еще не работает :-( –

1

Интересно, пытаетесь ли вы получить доступ к bitmapdata до его загрузки?

Возможно, попробуйте использовать полный слушатель ...

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); 
} 
Смежные вопросы