facebook twitter hatena line email

Android/画像/画像向き回転

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
  • Main.java
import BitmapUtil;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import java.io.IOException;
import java.io.InputStream;
import android.net.Uri;
import android.provider.MediaStore;
import android.content.ContentResolver;
import android.database.Cursor;
ContentResolver cr = _context.getContentResolver();
InputStream in = cr.openInputStream(uri);
// 写真の角度取得
Cursor query = MediaStore.Images.Media.query(cr, uri,
    new String[] { MediaStore.Images.ImageColumns.ORIENTATION }, null, null);
query.moveToFirst();
int orientation = query.getInt(0);
Bitmap bitmap = BitmapFactory.decodeStream(in);
// 回転しない
if (orientation == 0) {
  return bitmap;
// 回転させる
} else {
  return BitmapUtil.createChangeRotaBmp(bitmap, orientation);
}
  • BitmapUtil.java
import android.graphics.Matrix;
/**
 * Bitmapユーティリティクラス
 */
public class BitmapUtil {
  /**
   * 画像を回転して取得
   * @param int  degrees  0~360度数
   */
  public static Bitmap createChangeRotaBmp(Bitmap src, int degrees) {
    int w = src.getWidth();
    int h = src.getHeight();
    // 回転後の高さ幅。最後の+0.5は四捨五入のため(参考:http://homepage2.nifty.com/tsugu/sotuken/rotation/
    int height = (int)(Math.abs(w * Math.cos(degrees / 180 * Math.PI)) + Math.abs(h * Math.sin(degrees / 180 * Math.PI) + 0.5));
    int width = (int)(Math.abs(w * Math.sin(degrees / 180 * Math.PI)) + Math.abs(h * Math.cos(degrees / 180 * Math.PI) + 0.5));
    Matrix matrix = new Matrix();
    matrix.postRotate(degrees);  // 回転させる角度を指定(45度は45.0f
    Bitmap bmp = Bitmap.createBitmap(src, 0, 0, height, width, matrix, true);
    matrix = null;
    if (src != null) {
      // Bitmapデータの解放
      //src.recycle();
      src = null;
    }
    return bmp;
  }
}