Image saved with wrong orientation

android, camera, commonsware

Solution

Try this.

public void surfaceCreated(SurfaceHolder holder) {
    try {
        camera = Camera.open();
        camParam = camera.getParameters();
        Camera.Parameters params = camera.getParameters();
        String currentversion = android.os.Build.VERSION.SDK;
        Log.d("System out", "currentVersion " + currentversion);
        int currentInt = android.os.Build.VERSION.SDK_INT;
        Log.d("System out", "currentVersion " + currentInt);

        if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
            if (currentInt != 7) {
                camera.setDisplayOrientation(90);
            } else {
                Log.d("System out", "Portrait " + currentInt);

                params.setRotation(90);

                /*
                 * params.set("orientation", "portrait");
                 * params.set("rotation",90);
                 */
                camera.setParameters(params);
            }
        }
        if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
            // camera.setDisplayOrientation(0);
            if (currentInt != 7) {
                camera.setDisplayOrientation(0);
            } else {
                Log.d("System out", "Landscape " + currentInt);
                params.set("orientation", "landscape");
                params.set("rotation", 90);
                camera.setParameters(params);
            }
        }
        camera.setPreviewDisplay(holder);
        camera.startPreview();
    } catch (IOException e) {
        Log.d("CAMERA", e.getMessage());
    }
}

Problem

I am using this code: https://github.com/commonsguy/cw-advandroid/blob/master/Camera/Picture/src/com/commonsware/android/picture/PictureDemo.java where in `Manifest`, `Activity Orientation` is set to Landscape. So, its like allowing user to take picture only in Landscape mode, and if the picture is taking by holding the device in portrait mode, the image saved is like this: a 90 degree rotated image. After searching for a solution, I found this: Android - Camera preview is sideways where the solution is: in `surfaceChanged()` check for ``` Display display = ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay(); display.getRotation(); ``` and change the Camera's displayOrientation accordingly. ``` camera.setDisplayOrientation(90); ``` But no matter how many times I rotate the device, `surfaceChanged()` never gets called. I even tried removing `orientation="Landscape"` in the Manifest.xml, but then the preview itself is shown sideways(may be because default `android.view.SurfaceView` is supposed to be in Landscape mode?).

Original source

Related problems