2011-04-07 108 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