decode the image to bitmap based on its orientation and rotate accordingly if the output is not in portrait mode - Android android.graphics

Android examples for android.graphics:Image Load Save

Description

decode the image to bitmap based on its orientation and rotate accordingly if the output is not in portrait mode

Demo Code

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.media.ExifInterface;
import android.util.Log;

public class Main {

  /**/*from ww  w. j  av a2 s  .  c o  m*/
   * Helper method to decode the image to bitmap based on its orientation and
   * rotate accordingly if the output is not in portrait mode
   * 
   * @param context
   * @param path
   * @return
   */

  public static Bitmap decodeFile(Context context, String path) {

    int orientation;

    try {

      if (path == null) {
        return null;
      }
      // decode image size
      BitmapFactory.Options o = new BitmapFactory.Options();
      o.inJustDecodeBounds = true;

      // Find the correct scale value. It should be the power of 2.
      final int REQUIRED_SIZE = 70;
      int width_tmp = o.outWidth, height_tmp = o.outHeight;
      int scale = 4;
      while (true) {
        if (width_tmp / 2 < REQUIRED_SIZE || height_tmp / 2 < REQUIRED_SIZE)
          break;
        width_tmp /= 2;
        height_tmp /= 2;
        scale++;
      }
      // decode with inSampleSize
      BitmapFactory.Options o2 = new BitmapFactory.Options();
      o2.inSampleSize = scale;
      Bitmap bm = BitmapFactory.decodeFile(path, o2);

      Bitmap bitmap = bm;

      ExifInterface exif = new ExifInterface(path);
      orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
      Log.e("orientation", "" + orientation);
      Matrix m = new Matrix();

      if ((orientation == 3)) {
        m.postRotate(180);
        m.postScale((float) bm.getWidth(), (float) bm.getHeight());


        bitmap = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), m, true);

        return bitmap;
      } else if (orientation == 6) {

        m.postRotate(90);

        bitmap = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), m, true);

        return bitmap;
      }

      else if (orientation == 8) {

        m.postRotate(270);

        bitmap = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), m, true);
        return bitmap;
      }

      return bitmap;
    } catch (Exception e) {
      e.printStackTrace();
    }

    return null;
  }

}

Related Tutorials