Images have different orientations, so they rotate in accordance with the orientation when putting on the image. You can check the orientation of the photo by image properties. To set the image correctly, you can use the following code ...
int rot=getCameraPhotoOrientation(this,Uri,picturePath); if(rot!=0) bitmap=new RotateOrientation().RotateOrientationCall(bitmap,rot);
GetCameraPhotoOrientation Method: -
public static int getCameraPhotoOrientation(Context context, Uri imageUri, String imagePath){ int rotate = 0; try { context.getContentResolver().notifyChange(imageUri, null); File imageFile = new File(imagePath); ExifInterface exif = new ExifInterface( imageFile.getAbsolutePath()); int orientation = exif.getAttributeInt( ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); switch (orientation) { case ExifInterface.ORIENTATION_ROTATE_270: rotate = 270; break; case ExifInterface.ORIENTATION_ROTATE_180: rotate = 180; break; case ExifInterface.ORIENTATION_ROTATE_90: rotate = 90; break; } Log.d(TAG, "Exit orientation: " + orientation); } catch (Exception e) { e.printStackTrace(); } return rotate; }
Add a RotateOrientation class to rotate the class according to orientation.
public class RotateOrientation { Bitmap RotateOrientationCall(Bitmap src,float degree) { Matrix matrix=new Matrix(); matrix.postRotate(degree); Bitmap bmOut = Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight(), matrix, true); return bmOut; } }
source share