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

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

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

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

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

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

/**
 * 利用給定路徑下的圖片設置ImageView
 * @param imgPath 手機圖片文件路徑
 * @param imgView 需要設置的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; // 設置之后可以獲取尺寸信息
  Bitmap bitmap = BitmapFactory.decodeFile(imgPath, options);
  // 計算水平和垂直縮放系數
  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; // 圖片旋轉角度
  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) { // 圖片需要旋轉
   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. 圖片縮放:原始圖片一般比較大,經過縮小才能使用;

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

總結

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

相關文章

最新評論

龙游县| 开原市| 奉新县| 当阳市| 蓝山县| 鞍山市| 武隆县| 凤山市| 江西省| 枣阳市| 福海县| 平山县| 永安市| 潢川县| 阳朔县| 墨玉县| 滦南县| 静乐县| 灌阳县| 胶州市| 大足县| 嘉义市| 林西县| 乌拉特中旗| 神池县| 肇州县| 沙河市| 西和县| 靖边县| 武穴市| 乐业县| 辉南县| 长治县| 湘乡市| 海淀区| 栖霞市| 呼和浩特市| 宁国市| 遂溪县| 秦皇岛市| 息烽县|