2015-07-28 5 views
0

в мобильном приложении мне нужно отправить изображение, которое пользователь либо взял с камерой, либо выбрал из камероллы. Я использую рамку скворца и feathersUI (хотя я думаю, что это не имеет значения, проблемы) Когда MediaPromise загружаются с помощью loadFilePromise я использую следующий код, чтобы иметь дело с данными изображения:Ошибка безопасности при попытке загрузить ByteArray из mediaPromise

_mediaLoader = new Loader() 
//loading the filePromise from CameraRoll 
_mediaLoader.loadFilePromise(_mediaPromise); 
_mediaLoader.contentLoaderInfo.addEventListener(starling.events.Event.COMPLETE, onLoadImageComplete); 
private function onLoadImageComplete(event:flash.events.Event=null):void { 
    //creating the starling texture to display the image inside the application 
    var texture:Texture = Texture.fromBitmapData(Bitmap(_mediaLoader.content).bitmapData, false, false, 1); 
    //now trying to load the content into a bytearray to send to the server later 
    var bytes:ByteArray=_mediaLoader.contentLoaderInfo.bytes; 
} 

последней строка кода приводит к ошибке безопасности: Ошибка # 2044: необработанный SecurityErrorEvent :. text = Ошибка # 2121: нарушение безопасности песочницы: приложение: /myapp.swf: http://adobe.com/apollo/[[DYNAMIC]]/1 не может получить доступ. Это можно обойти, вызвав Security.allowDomain.

Я попытался

Security.allowDomain("*") 

как тест , но затем я получаю: SecurityError: Error # 3207: Application-песочница содержание не может получить доступ к этой функции.

В качестве обходного пути я пишу свой собственный PNG ByteArray внутри приложения от погрузчиков BitmapData с использованием Adobes PNGEncoder Класс:

var ba:ByteArray=PNGEncoder.encode(Bitmap(_mediaLoader.content).bitmapData) 

Но это занимает значительное количество времени ...

Я также попытался FileReference загрузить изображение, но

_mediaPromise.file 

и

_mediaPromise.relativePath 

оба являются нулевыми.

Что я делаю неправильно? Или это известная проблема?

Спасибо!

+0

Поскольку я еще не отвечал на это, могу сказать, что я решил эту проблему в своем последнем проекте, используя com.freshplanet.ane.AirImagePicker, где возвращаемые данные имеют тип BitmapData. Поэтому, если вы застряли с кодом и нет выхода, взгляните на этот ANE, это сработало для меня. Вы в настоящее время запрашиваете собственное приложение для камеры вручную или какой маршрут вы сейчас собираетесь? –

+0

Получение BitmapData без проблем с использованием Bitmap (_mediaLoader.content) .bitmapData Получение необработанного ByteArray является проблемой ... – zantafio

+0

Вы пытались получить ByteArray из BitmapData с помощью getPixels? (см. [this SO Thread] (http://stackoverflow.com/questions/27444583/get-a-bytearray-from-bitmapdata-in-as3)) –

ответ

0

Здравствуйте, я нашел решение, основанное на пост об обработке данных EXIF, упомянутых здесь: http://blogs.adobe.com/cantrell/archives/2011/10/parsing-exif-data-from-images-on-mobile-devices.html

ключевой код

private function handleMedia(event:MediaEvent):void{ 

    _mediaPromise=event.data as MediaPromise; 
    _imageBytes=new ByteArray() 
    var mediaDispatcher:IEventDispatcher = _mediaPromise.open() as IEventDispatcher; 
    mediaDispatcher.addEventListener(ProgressEvent.PROGRESS, onMediaPromiseProgress); 
    mediaDispatcher.addEventListener(flash.events.Event.COMPLETE, onMediaPromiseComplete); 
}; 
private function onMediaPromiseProgress(e:ProgressEvent):void{ 
    var input:IDataInput = e.target as IDataInput; 
    input.readBytes(_imageBytes, _imageBytes.length, input.bytesAvailable); 
}; 
private function onMediaPromiseComplete(e:flash.events.Event):void{ 
    _mediaLoader = new Loader(); 
    _mediaLoader.loadBytes(_imageBytes) 

}; 

работает как шарм для меня на IPad и Iphone.

 Смежные вопросы

  • Нет связанных вопросов^_^