背景:我正在为信使程序编写相机应用程序。我无法随时将捕获的图像保存到永久磁盘。相机必须支持所有方向。我的实现是熟悉的 Surfaceview 示例。我使用 Display 类来检测方向并相应地旋转相机。在 takePicture jpeg 回调中,我从 byte[] 构造了一个位图,以解决我遇到的一些纵横比问题:Camera API: Cross device issues
问题描述:在某些设备上,在 ROTATION_270(设备顺时针旋转 90 度)拍摄的构造位图颠倒过来。到目前为止,它似乎是三星。我只能假设相机可能是以其他方式焊接的,或者有什么影响,但这既不存在也不存在。虽然我可以检查位图是否横向,但我无法从逻辑上检查它是否按尺寸倒置,因此我需要访问 EXIF 数据。
Android为此http://developer.android.com/reference/android/media/ExifInterface.html提供了一个解析器,但不幸的是它有一个接受文件的构造函数......我没有也不想要. 直观地说,我可以为字节数组编写一个构造函数,但考虑到他们调用本机代码http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2 ,这似乎真的很痛苦.1_r1/android/media/ExifInterface.java
我的问题有两个部分:
有谁知道 byte[] 数组是否包含完整的 EXIF jpeg 标头数据,或者是通过 BitmapFactory.decode(...) / BitmapFactory.compress(...) 以某种方式添加的路径?
如果此 EXIF 数据存在于字节数组中,我如何以可靠的方式解析出方向信息?
2012 年 10 月 18 日编辑
pcans 下面的回答涉及我问题的第 2 部分。正如我在他的回答下面的评论中指出的那样,如果您想使用该解析器,您必须将源代码合并到您的项目中。该链接的 SO 帖子中提到的更改已在此处进行并重新发布:https ://github.com/strangecargo/metadata-extractor
注意 较新版本的元数据提取器无需修改即可直接在 Android 上运行,并可通过 Maven 获得。
但是,对于第 1 部分,当我使用从 takePicture 获得的字节数组运行解析器时,我从解析器返回 0 个标签。我开始担心字节数组没有我需要的数据。我将继续研究这一点,但欢迎任何进一步的见解。