Android通過ExifInterface判斷Camera圖片方向的方法
Android的Camera相關應用開發(fā)中,有一個必須搞清楚的知識點,就是Camera的預覽方向和拍照方向
圖像的Sensor方向:手機Camera的圖像數(shù)據(jù)都是來自于攝像頭硬件的圖像傳感器(Image Sensor),這個Sensor被固定到手機之后是有一個默認的取景方向的,這個方向如下圖所示,坐標原點位于手機橫放時的左上角:

android應用里使用相機圖片時必須要考慮的一個問題就是圖片朝向,只有判斷對朝向才能調(diào)整圖片從而更好的展現(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);
// 計算水平和垂直縮放系數(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)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內(nèi)容請查看下面相關鏈接
相關文章
Android開發(fā)之圖片旋轉(zhuǎn)功能實現(xiàn)方法【基于Matrix】
這篇文章主要介紹了Android開發(fā)之圖片旋轉(zhuǎn)功能實現(xiàn)方法,結(jié)合實例形式分析了Android基于matrix矩陣操作圖形變換的相關實現(xiàn)技巧,需要的朋友可以參考下2017-09-09
Android獲取LinearLayout的寬度和高度示例代碼
這篇文章主要介紹了android獲取LinearLayout的寬度和高度,如果想直接獲取在布局文件中定義的組件的寬度和高度,可以直接使用View.getLayoutParams().width和View.getLayoutParams().height,本文結(jié)合示例代碼介紹的非常詳細,需要的朋友可以參考下2023-08-08
Android開發(fā)VR實戰(zhàn)之播放360度全景視頻
這篇文章主要為大家詳細介紹了Android開發(fā)VR實戰(zhàn)之播放360度全景視頻,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-12-12
android不同activity之間共享數(shù)據(jù)解決方法
最近做局域網(wǎng)socket連接問題,要在多個activity之間公用一個socket連接,就在網(wǎng)上搜了下資料,感覺還是application方法好用,帖出來需要的朋友可以參考下2012-11-11

