如何判断图像在缓冲区中是否旋转?

3
我目前使用OnImageCaptured回调来获取我的图像,而不是将其保存到设备上。当从ImageProxy获取图像时,我很难理解何时需要旋转图像。
我使用以下方法将ImageProxy中的数据转换为BitMap:
...
val buffer: ByteBuffer = imageProxy.planes[0].buffer // Only first plane because of JPEG format.
val bytes = ByteArray(buffer.remaining())
buffer.get(bytes)
return BitmapFactory.decodeByteArray(bytes, 0, bytes.size)

生成的位图有时会旋转,有时不会,这取决于拍摄图片的设备。 ImageProxy.getImageInfo().getRotationDegrees() 返回正确的旋转角度,但我不知道何时需要应用它,因为有时在位图中应用它,有时则没有。

ImageCapture.OnCapturedImageListener documentation 还说:

提供的图像是由底层 ImageReader 捕获而不应用旋转的。rotationDegrees 描述了顺时针旋转的量,如果应用到图像中,将使其与当前配置的目标旋转匹配。

这让我想到我可能没有正确获取位图,因为有时已经应用了旋转。我是否遗漏了什么?

1个回答

1

事实证明,唯一必要的信息是Exif元数据。 rotationDegrees 包含图像应该呈现的最终方向,从基本方向开始,但Exif元数据仅显示我必须进行的旋转以获得最终结果。因此,根据 TAG_ORIENTATION 旋转解决了这个问题。

  • 更新:这是CameraX库本身的问题。它已在1.0.0-beta02中修复,因此现在exif元数据和rotationDegrees包含相同的信息。

请问您能分享一下代码吗?我遇到了同样的问题。 - Shadman Adman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接