简体   繁体   中英

Flash CS5.5: Photo is rotated when capture a photo using CameraUI on iPhone

Please help, I already succeed in accessing and capturing a photo through camera of an iphone. But the problem is when I load it in by "loadFilePromise", a photo is rotated wrong direction.

import flash.media.CameraUI;
import flash.media.MediaType;
import flash.media.MediaPromise;
import flash.events.MediaEvent;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.display.Loader;
import flash.display.Bitmap;
import flash.media.CameraRoll;
import flash.display.StageOrientation;
import flash.events.StageOrientationEvent;
import flash.media.Camera;
import flash.media.Video;

var currentOrientation:String = "";

var cam:CameraUI = new CameraUI();
cam.addEventListener(MediaEvent.COMPLETE, captured);
cam.addEventListener(Event.CANCEL, cancelled);

var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, photoLoaded);
addChild(loader);

captureBtn.addEventListener(MouseEvent.MOUSE_UP, pressed);

function pressed(e:MouseEvent){
    if(CameraUI.isSupported){
        cam.launch(MediaType.IMAGE);
    }
}

function captured(e:MediaEvent){
    var mediaPromise:MediaPromise = e.data;
    if(mediaPromise != null)
    {
        output.text = "Photo captured.";
        loader.loadFilePromise(mediaPromise);
    }
}

function cancelled(e:Event):void {
    output.text = "Cancelled.";
}

stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGING,orientationChanging);
stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGE, orientationChanged);

function orientationChanging(e:StageOrientationEvent){
    currentOrientation = e.afterOrientation;
    trace(currentOrientation);
    switch(currentOrientation)
    {
        case StageOrientation.DEFAULT :
            currentOrientation = "DEFAULT";
            //set rotation value here
            stage.rotation = 0;
            break;

        case StageOrientation.ROTATED_RIGHT :
            currentOrientation = "ROTATED_RIGHT";
            //set rotation value here
            stage.rotation = -90;
            break;

        case StageOrientation.ROTATED_LEFT :
            currentOrientation = "ROTATED_LEFT";
            //set rotation value here
            stage.rotation = 90;
            break;

        case StageOrientation.UPSIDE_DOWN :
            currentOrientation = "UPSIDE_DOWN";
            //set rotation value here
            stage.rotation = 180;
            break;
    }
}

function orientationChanged(e:StageOrientationEvent){

}

function photoLoaded(e:Event){
    var img:Bitmap = e.currentTarget.content as Bitmap;
    img.smoothing = true;
    img.width = 350
    img.scaleY = img.scaleX;

    /* TRY THIS TO FIX BUT IT DIDN'T WORK:
        switch(currentOrientation){

        case "rotatedLeft":
            img.rotation = 90;
        break;

        case "rotatedRight":
            img.rotation = 90;
        break;

        case "upsideDown":

        break;

    }*/

    /* THESE LINE ARE JUST USED TO SAVE PHOTO IN CAMERA ROLL:
        if(CameraRoll.supportsAddBitmapData)
    {
        cameraRoll.addBitmapData(img.bitmapData);
    }*/
}

function camRollSaved(e:Event){
    output.text = "Your photo is saved to a camera roll."
}

I already unchecked "Auto orientation" in publish settings, tried to correct StageOrientation but it still didn't work.

stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGING,orientationChanging);
stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGE, orientationChanged);

It's only correct when I rotate an iphone to lanscape (with the camera's position at TOP-RIGHT), then take a picture.

Does anyone has the same problem or know how to solve it?

Thanks so much,

This solved it for me on Android: http://blog.flexnroses.com/?p=95

I think there is a problem with the libraries for iOS, so it might not solve your problem, but maybe you can get the inspiration you need from this. Good luck!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM