Java tutorial
//package com.java2s; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.media.ExifInterface; public class Main { public static Bitmap decodeBitmapWithOrientation(String pathName, int width, int height) { return decodeBitmapWithSize(pathName, width, height, false); } private static Bitmap decodeBitmapWithSize(String pathName, int width, int height, boolean useBigger) { final BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; options.inInputShareable = true; options.inPurgeable = true; BitmapFactory.decodeFile(pathName, options); int decodeWidth = width, decodeHeight = height; final int degrees = getImageDegrees(pathName); if (degrees == 90 || degrees == 270) { decodeWidth = height; decodeHeight = width; } if (useBigger) { options.inSampleSize = (int) Math.min(((float) options.outWidth / decodeWidth), ((float) options.outHeight / decodeHeight)); } else { options.inSampleSize = (int) Math.max(((float) options.outWidth / decodeWidth), ((float) options.outHeight / decodeHeight)); } options.inJustDecodeBounds = false; Bitmap sourceBm = BitmapFactory.decodeFile(pathName, options); return imageWithFixedRotation(sourceBm, degrees); } public static int getImageDegrees(String pathName) { int degrees = 0; try { ExifInterface exifInterface = new ExifInterface(pathName); int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); switch (orientation) { case ExifInterface.ORIENTATION_ROTATE_90: degrees = 90; break; case ExifInterface.ORIENTATION_ROTATE_180: degrees = 180; break; case ExifInterface.ORIENTATION_ROTATE_270: degrees = 270; break; } } catch (Exception e) { e.printStackTrace(); } return degrees; } public static Bitmap imageWithFixedRotation(Bitmap bm, int degrees) { if (bm == null || bm.isRecycled()) return null; if (degrees == 0) return bm; final Matrix matrix = new Matrix(); matrix.postRotate(degrees); Bitmap result = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), matrix, true); if (result != bm) bm.recycle(); return result; } }