Taking picture with camera intent rotate picture in portrait mode android

android, android-camera, android-camera-intent

Solution

Pass your taken picture and SDCard path of that picture into the following method which will return the correct oriented picture...

private Bitmap imageOreintationValidator(Bitmap bitmap, String path) {

    ExifInterface ei;
    try {
        ei = new ExifInterface(path);
        int orientation = ei.getAttributeInt(ExifInterface.TAG_ORIENTATION,
                ExifInterface.ORIENTATION_NORMAL);
        switch (orientation) {
        case ExifInterface.ORIENTATION_ROTATE_90:
            bitmap = rotateImage(bitmap, 90);
            break;
        case ExifInterface.ORIENTATION_ROTATE_180:
            bitmap = rotateImage(bitmap, 180);
            break;
        case ExifInterface.ORIENTATION_ROTATE_270:
            bitmap = rotateImage(bitmap, 270);
            break;
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

    return bitmap;
}

private Bitmap rotateImage(Bitmap source, float angle) {

    Bitmap bitmap = null;
    Matrix matrix = new Matrix();
    matrix.postRotate(angle);
    try {
        bitmap = Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(),
                matrix, true);
    } catch (OutOfMemoryError err) {
        err.printStackTrace();
    }
    return bitmap;
}

Problem

Picture was taken successfully with camera but in portrait mode on samsung galaxy s3 the picture gets rotated. How can i solve this issue. Camera intent is as follows: ``` Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(xdestination)); startActivityForResult(intent, CAMERA_PIC_REQUEST); ``` In activity for result ``` if (requestCode==CAMERA_PIC_REQUEST){ // Bitmap bm = (Bitmap) data.getExtras().get("data"); Uri photo_uri = Uri.fromFile(xdestination); Editer.PHOTO_FROM=11; Bitmap decodeSampledBitmapFromFile=null; try { decodeSampledBitmapFromFile = decodeUri(photo_uri); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } ByteArrayOutputStream bytes = new ByteArrayOutputStream(); decodeSampledBitmapFromFile.compress(Bitmap.CompressFormat.JPEG,100, bytes); File f = new File(Environment.getExternalStorageDirectory(), "user_image.jpg"); try { if(f.exists()) f.delete(); f.createNewFile(); FileOutputStream fo = new FileOutputStream(f); fo.write(bytes.toByteArray()); fo.close(); } catch (IOException e) { e.printStackTrace( ); Log.d("ERROR", e.toString()); } } ```

Original source

Related problems