Android:相机Activity,图像旋转

Android: Camera Activity, Image rotation

我用 SurfaceView 和相机 类 制作了相机 Activity。

两个片段:当我们第一次拍照时,它移动到第二个片段,显示刚刚拍摄的照片。 (就像 new Intent(MediaStore.ACTION_IMAGE_CAPTURE))。

显示图片时出现问题。 当我用人像模式拍照时,它显示得很好,就像第一张一样。

但是,当我在风景模式下拍照时,它显示如下第二张图。

但我希望它看起来像第三个。

我认为问题的发生是因为我在横向模式下翻转相机,phone 并不知道。 (很明显)但是当我打开旋转时,当我旋转 phone.

时切换到横向模式时它会崩溃

相机有没有办法像正常的 android 相机应用程序一样自动知道用户正在以横向模式拍照? 或者我的问题的任何解决方案都可以。

我觉得你的问题比你想象的要简单。

所以在人像模式下,您的设备会拍照,捕捉例如1080p 照片作为垂直图像。在风景水平模式)中用first fragment(使用SurfaceView)拍照时,你仍然例如拍摄照片1080p 照片。

second fragment 上查看照片时,默认情况下,您的设备不知道照片的方向。它也可以是人像照片。因此,拍摄图像时,您需要向照片图像添加一个附加属性(或捆绑到第二个片段)告诉第二个片段更改 orientation 并查看特定 orientation 中的图像。

根据有限的信息,我认为您的代码没有错误(除了您提到的崩溃 - 我认为这与 saving/restoring instanceState 来自 bundle) - 但只需要以正确的方向查看图像即可。

通常,图片方向保存在 jpeg 图片的 EXIF header 中。有些设备不会在相机 API 中为您设置此标志,但所有设备都有 ExifInterface class. The support library 让这更容易。

即使标志设置正确,显示图片的片段也必须知道如何应用它才能正确显示。最简单的解决方案是使用 Glyde 或其他一些库。