最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android通過ExifInterface判斷Camera圖片方向的方法

 更新時間:2018年12月13日 14:30:40   作者:chadeltu  
今天小編就為大家分享一篇關(guān)于Android通過ExifInterface判斷相機圖片朝向的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

Android的Camera相關(guān)應(yīng)用開發(fā)中,有一個必須搞清楚的知識點,就是Camera的預覽方向和拍照方向

圖像的Sensor方向:手機Camera的圖像數(shù)據(jù)都是來自于攝像頭硬件的圖像傳感器(Image Sensor),這個Sensor被固定到手機之后是有一個默認的取景方向的,這個方向如下圖所示,坐標原點位于手機橫放時的左上角:

android應(yīng)用里使用相機圖片時必須要考慮的一個問題就是圖片朝向,只有判斷對朝向才能調(diào)整圖片從而更好的展現(xiàn)。本文將介紹一種通過ExifInterface判斷圖片朝向的方法!上代碼:

/**
 * 利用給定路徑下的圖片設(shè)置ImageView
 * @param imgPath 手機圖片文件路徑
 * @param imgView 需要設(shè)置的ImageView
 */
 public void setImg(String imgPath, ImageView imgView) {
 File file = new File(imgPath);
 if (file.exists() && file.canRead()) {
  // -------1.圖片縮放--------
  // 手機屏幕信息
  DisplayMetrics metric = new DisplayMetrics();
  getWindowManager().getDefaultDisplay().getMetrics(metric);
  int dw = metric.widthPixels; // 屏幕寬
  int dh = metric.heightPixels; // 屏幕高
  // 加載圖像,只是為了獲取尺寸
  BitmapFactory.Options options = new BitmapFactory.Options();
  options.inJustDecodeBounds = true; // 設(shè)置之后可以獲取尺寸信息
  Bitmap bitmap = BitmapFactory.decodeFile(imgPath, options);
  // 計算水平和垂直縮放系數(shù)
  int heightRatio = (int) Math.ceil(options.outHeight / (float) dh);
  int widthRatio = (int) Math.ceil(options.outWidth / (float) dw);
  // 判斷哪個大
  if (heightRatio > 1 && widthRatio > 1) {
  if (heightRatio > widthRatio) {
   options.inSampleSize = heightRatio;
  } else {
   options.inSampleSize = widthRatio;
  }
  }
  // 圖片縮放
  options.inJustDecodeBounds = false;
  bitmap = BitmapFactory.decodeFile(imgPath, options);
  // -------2.判斷圖片朝向--------
  try {
  ExifInterface exif = new ExifInterface(imgPath);
  int degree = 0; // 圖片旋轉(zhuǎn)角度
  if (exif != null) {
   int orientation = exif.getAttributeInt(
    ExifInterface.TAG_ORIENTATION, -1);
   if (orientation != -1) {
   switch (orientation) {
   case ExifInterface.ORIENTATION_ROTATE_90:
    degree = 90;
    break;
   case ExifInterface.ORIENTATION_ROTATE_180:
    degree = 180;
    break;
   case ExifInterface.ORIENTATION_ROTATE_270:
    degree = 270;
    break;
   default:
    break;
   }
   }
  }
  if (degree != 0) { // 圖片需要旋轉(zhuǎn)
   int width = bitmap.getWidth();
   int height = bitmap.getHeight();
   Matrix matrix = new Matrix();
   matrix.preRotate(degree);
   Bitmap mRotateBitmap = Bitmap.createBitmap(bitmap, 0, 0,
    width, height, matrix, true);
   imgView.setImageBitmap(mRotateBitmap);
  } else {
   imgView.setImageBitmap(bitmap);
  }
  } catch (IOException e) {
  }
 }
 }

本代碼包含兩大功能:

1. 圖片縮放:原始圖片一般比較大,經(jīng)過縮小才能使用;

2. 圖片旋轉(zhuǎn):由于用戶拍照時手機角度不同,所得照片可能需要旋轉(zhuǎn)。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

最新評論

柳林县| 安国市| 金秀| 泗洪县| 大渡口区| 华亭县| 遂昌县| 泸西县| 新田县| 岳池县| 镇安县| 阜新市| 新泰市| 大渡口区| 宜川县| 涿鹿县| 新津县| 会泽县| 麻江县| 北流市| 泰来县| 长海县| 都匀市| 沛县| 翁牛特旗| 广河县| 策勒县| 交城县| 荥阳市| 康马县| 潼南县| 乌什县| 凉城县| 宜昌市| 富平县| 来安县| 平昌县| 潼关县| 天长市| 南乐县| 丰顺县|