Есть ли у кого-нибудь опыт работы с API-интерфейсом камеры в Flex 4.6 с iOS? У меня много проблем с настройкой, и документации нет. Я пытаюсь настроить компонент загрузки изображения, где пользователь может либо захватить новую фотографию, либо выбрать существующую из своей библиотеки.Загрузить библиотеку или снятые изображения на iOS с помощью Flex Mobile 4.6
Для захвата, кажется, что существует огромная зависания (например, 10 секунд, когда приложение просто сидит не реагирует), когда изображение сохраняется в виде JPEG, и я использую swc Alchemy.
private var cam:CameraUI;
protected function takePhotoHandler(event:MouseEvent):void
{
if(CameraUI.isSupported) {
cam = new CameraUI();
cam.addEventListener(MediaEvent.COMPLETE, mediaEventComplete);
cam.launch(MediaType.IMAGE);
}
}
protected function mediaEventComplete(e:MediaEvent):void
{
cam.removeEventListener(MediaEvent.COMPLETE, mediaEventComplete);
status.text = "Media captured..." ;
var imagePromise:MediaPromise = e.data;
var loader:Loader = new Loader();
if(imagePromise.isAsync) {
status.text = "Asynchronous media promise." ;
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, asyncImageLoadHandler);
loader.addEventListener(IOErrorEvent.IO_ERROR, asyncImageErrorHandler);
loader.loadFilePromise(imagePromise);
} else {
status.text = "Synchronous media promise.";
loader.loadFilePromise(imagePromise);
img.source = loader.content;
saveImage(loader.contentLoaderInfo);
}
}
protected function asyncImageLoadHandler(e:Event):void
{
status.text = "Media loaded in memory.";
img.source = e.currentTarget.loader.content;
saveImage(e.currentTarget.loader.contentLoaderInfo);
}
protected function saveImage(loaderInfo:LoaderInfo):void
{
if(CameraRoll.supportsAddBitmapData){
var bitmapData:BitmapData = new BitmapData(loaderInfo.width, loaderInfo.height);
bitmapData.draw(loaderInfo.loader);
d_trace("bitmapDraw");
//var c:CameraRoll = new CameraRoll();
//c.addBitmapData(bitmapData);
d_trace("writing to disk");
var f:File = File.applicationStorageDirectory.resolvePath("temp");
var stream:FileStream = new FileStream()
stream.open(f, FileMode.WRITE);
d_trace("encoding start");
var baSource: ByteArray = bitmapData.clone().getPixels(new Rectangle(0, 0, loaderInfo.width, loaderInfo.height));
var bytes: ByteArray = as3_jpeg_wrapper.write_jpeg_file(baSource, loaderInfo.width, loaderInfo.height, 3, 2, 80);
d_trace("encoding end");
stream.writeBytes(bytes,0,bytes.bytesAvailable);
stream.close();
d_trace(f.url);
img.source = f.url;
d_trace("UPLOADING START");
f.addEventListener(Event.COMPLETE,uploadCompleteHandler);
f.addEventListener(Event.OPEN,openUploadHandler);
f.upload(urlRequest);
}
}
Для выбора из библиотеки я не могу получить ссылку на файл, чтобы начать загрузку. Когда выбор сделан, значение mediaPromise.file равно null. mediaPromise.isAsync истинно, и я могу подключить слушателя загрузчика, но он возвращает только ContentLoaderInfo, который не имеет ссылки на фактический файл или файл, поэтому я не могу вызвать метод загрузки без создания временного изображения, которое кажется дорогим и псих.
protected function chooseImage(): void {
if(CameraRoll.supportsBrowseForImage) {
var roll: CameraRoll = newCameraRoll();
roll.addEventListener(MediaEvent.SELECT, roll_selectHandler);
var options:CameraRollBrowseOptions = new CameraRollBrowseOptions();
roll.browseForImage(options);
}}
private function roll_selectHandler(event: MediaEvent): void
{
var imagePromise:MediaPromise = event.data;
if(imagePromise.isAsync) {
// Here's where I get. Not sure how to get the reference to the file I just selected.
}}
Любая помощь будет оценена по достоинству.
Спасибо!
Вы используете много слов, которые я не знаю, и я профессиональный разработчик Flex ... поздравления :). http://www.adobe.com/devnet/air/articles/uploading-images-media-promise.html Я не пробовал это, но похоже, что вы можете получить IDataInput, который затем вы можете прочитать байты? Вы видели этот пример, это помогает? – shaunhusain
Ничего себе, это именно то, что я искал. Огромное спасибо! Я искал страницы/видеоролики Devnet, предполагая, что кто-то должен был прогнать это уже и никогда не видел этого. – ChickensDontClap