Столкнулся с забавным багом. При тестировании на Android устройстве полученная фотка поворачивается на 90 градусов против часовой. При этом видно, что как бы само приложение при переходе в режим фото на доли секунды поворачивается в ландшафтную ориентацию, а после сохранения фото резко возвращается в назначенную портретную ориентацию. Самое прикольное, что если снимать фронтальной камерой, то тоже поворачивает, но на 90 градусов по часовой. В общем невозможно нормально использовать CameraUI.
Естественно везде в дескрипторе поставил <autoOrients>false</autoOrients> и <aspectRatio>portrait</aspectRatio>, на устройстве отключил автоповорот, но все равно делает по своему. В галерее фото сделанные приложением отображаются нормально. Баг замечен только на Самсунг SII, других Андроид девайсов нет чтобы проверить. На устройствах iOS все нормально.
Пробовал старую либу jp.shichiseki.exif по получению exif фоток с целью просто потом их поворачивать в зависимости от ориентации, но либа стала давать ошибку - не может преобразовать XML. В общем одни проблемы.
Если у кого есть Андроид устройства просьба проверить как у вас. Простейший класс приложения ниже или во вложении готовая APK (AIR встроен)
Код AS3:
package
{
import com.bit101.components.PushButton;
import flash.display.DisplayObject;
import flash.display.Loader;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.MediaEvent;
import flash.events.MouseEvent;
import flash.events.SecurityErrorEvent;
import flash.media.CameraUI;
import flash.media.MediaPromise;
import flash.media.MediaType;
import flash.net.URLRequest;
import flash.system.LoaderContext;
public class CameraApp extends Sprite
{
private var camera:CameraUI;
private var loader:Loader;
private static const LOADER_CONTEXT:LoaderContext = new LoaderContext(true);
public function CameraApp()
{
super();
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
var btn:PushButton = new PushButton(this, 20, 30, 'Take photo', takePhoto);
this.addChild(btn);
}
private function takePhoto(e:MouseEvent):void
{
camera = new CameraUI();
camera.addEventListener(MediaEvent.COMPLETE, onComplete);
camera.launch(MediaType.IMAGE);
}
protected function onComplete(event:MediaEvent):void
{
var mp:MediaPromise = event.data;
trace('url ' + mp.file.url);
load(mp.file.url)
}
protected function load(url:String):void
{
if(this.loader)
{
this.loader.unloadAndStop(true);
}
else
{
this.loader = new Loader();
this.loader.contentLoaderInfo.addEventListener(flash.events.Event.COMPLETE, loader_completeHandler);
this.loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loader_errorHandler);
this.loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loader_errorHandler);
}
this.loader.load(new URLRequest(url), LOADER_CONTEXT);
}
protected function loader_completeHandler(event:Event):void
{
this.addChildAt(loader.content as DisplayObject, 0);
}
protected function loader_errorHandler(event:IOErrorEvent):void
{
}
}
}