在做照相機圖片相關操作的時候,由於android手機的適配原因,不同手機上出發的相機操作可能在細節上有很多不同,例如攝像頭拍照的角度旋轉了,使得獲取到的圖片也是旋轉後的,再比如某些相機的圖片像素太高了,對圖片數據進行操作的時候造成內存不足等。下面就對相機拍攝時的圖像被旋轉的問題進行一些實際的解決方案:
問題:由於攝像頭拍照 是豎屏,顯示的時候需要旋轉了 90 度。也就是說顯示的是 旋轉90度後的 預覽 圖片?怎麼處理...
有一種方法是在說在拍照的時候將內容顯示設定爲橫屏顯示,
<activity android:name=".MainActivity" android:label="@string/app_name" android:screenOrientation="landscape">
還有在onCreate函數加入
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
這樣拍出來的圖片就不能被旋轉了。說實話,這種方式不具有通用型,而且很不靈活,不能適配所有手機。所以不建議,但是可以作爲一個想法。
其實真正能解決這種問題的方法是找到相機在拍照後得到的原圖和實際顯示的圖片的旋轉角度,然後我們再通過Matrix對圖片進行旋轉就Ok了。
那麼我們怎樣獲取相機拍攝的原圖和實際顯示圖片的旋轉角度呢?在網上找到了這種方法,經過驗證,着實可行。
/**
* 讀取照片exif信息中的旋轉角度
* @param path 照片路徑
* @return角度
*/
public static int readPictureDegree(String path) {
int degree = 0;
try {
ExifInterface exifInterface = new ExifInterface(path);
int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
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;
}
} catch (IOException e) {
e.printStackTrace();
}
return degree;
}
得到原圖和實際顯示的圖片的旋轉角度後,我們再通過對原圖進行旋轉degree就行了,這個旋轉方法可以通過Matrix實現。
參考:http://www.eoeandroid.com/thread-196978-1-1.html