2011-04-07 156 views
24

我需要知道圖庫的方向(由相機拍攝)。我最初的做法是使用適用於我的Droid 1的MediaStore.Images.Media.ORIENTATION。在HTC Thunderbolt上進行測試時,手機只會將該字段保存爲0。Exif數據TAG_ORIENTATION始終爲0

我然後轉移到讀取EXIF數據:

ExifInterface exifReader = new ExifInterface(mFilePath); 
exifReader.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1); 

這也爲每個圖像返回0。任何人有關於如何正確獲取Android上的照片取向的想法?

+0

發佈了合理的解決方案,我發現另一種解決方案,真正的偉大工程的一個錯誤! http://stackoverflow.com/a/19610087/2854335 – belphegor 2014-02-20 13:37:22

回答

5

我的解決方案:

從exif數據中刪除任何方向檢查。我無法找到一個準確的實例。

使用標準String[] orientationColumn = {MediaStore.Images.Media.ORIENTATION};得到一個方向。

如果這是0使用 decodeStream ...

if(o.outHeight > o.outWidth){ 
    //set orientation to portrait 
} 

否則爲景觀

+2

這不適合我,因爲,莫名其妙的高度,寬度,適當切換如果圖像實際上是在不同的方向.. – 2011-12-08 20:25:01

+0

只是更新我的自己的問題,這是我如何克服這個問題; http://stackoverflow.com/a/8864367/137404 – 2012-01-15 17:23:19

+0

如果圖像是正方形的,那麼寬度和高度是相同的,但是圖像是倒置的,我想翻轉它? – 2017-01-25 07:43:10

29

下面是我用onActivityResult()的代碼在我的活動。返回的意圖是用於選取類型爲image/*的圖像。適合我!

Uri imageUri = intent.getData(); 
String[] orientationColumn = {MediaStore.Images.Media.ORIENTATION}; 
Cursor cur = managedQuery(imageUri, orientationColumn, null, null, null); 
int orientation = -1; 
if (cur != null && cur.moveToFirst()) { 
    orientation = cur.getInt(cur.getColumnIndex(orientationColumn[0])); 
} 
Matrix matrix = new Matrix(); 
matrix.postRotate(orientation); 
+0

這種方法已經爲我在圖庫中獲取圖像的方向。謝謝..!! :) – sarabhai05 2012-10-05 07:21:05

+0

這是唯一的解決方案,爲我工作 – orelzion 2015-09-03 14:59:33

+4

謝謝!請注意,managedQuery現在已被棄用。您可以用「getApplicationContext()。getContentResolver()。query(...)」替換它。 – 2016-07-19 12:37:57

3

這是我發現這是關係到另一個Android的錯誤..我發現這裏https://stackoverflow.com/a/8864367/137404

+0

該鏈接發佈了另一個鏈接,該鏈接發佈了另一個鏈接。在這裏,Linkception是一個犯罪。 – 2017-01-25 07:43:48