【问题标题】:How setting Camera2 API the standard camera?如何将 Camera2 API 设置为标准相机?
【发布时间】:2018-03-27 10:29:45
【问题描述】:

如果我通过 Intent 使用标准相机来捕获图像:

打开相机:

 val takePicture = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
        if (takePicture.resolveActivity(packageManager) != null) {
            startActivityForResult(takePicture, TAKE_PICTURE)
        }

相机预览

ImageView 上的结果显示

如果我在以下位置使用 Camera2 API:git:https://github.com/googlesamples/android-Camera2Basic 图片结果不显示纵向

相机 2 预览

ImageView 上的结果显示

我的代码显示图片:

val bitmap = BitmapFactory.decodeFile(file.toString())
  imagePreview.setImageBitmap(bitmap)
                        }

如何设置 Camera2 API 以显示相同标准相机的结果?

【问题讨论】:

  • 我不确定我是否理解你的问题。
  • 如果我使用标准相机,预览和结果是一样的。但是如果我使用相机 2 api 来构建我的应用程序。预览不一样的结果。
  • 您需要针对硬件相机物理旋转进行调整,请发布一些关于如何在图像视图/画布中显示该图片的代码。
  • 必须将 ExifInterface 设置为 Image 吗?

标签: android android-camera2


【解决方案1】:

在 Camera2Basic 示例中,ImageSaver 不会根据设备方向旋转捕获的 JPEG。相反,Camera2BasicFragment.captureStillPicture() 设置了 CaptureRequest.JPEG_ORIENTATION,这只是相机固件的建议

相机设备可以将此值编码到 JPEG EXIF 标头中,或旋转图像数据以匹配此方向。当图片数据旋转时,缩略图数据也会随之旋转。

大多数情况下,此建议“仅”设置标题,但有些设备甚至会忽略该标题。请参阅最近的article,了解此功能及其可靠性。

请注意,并非所有查看器软件都尊重 EXIF 方向标签,因此,库存相机应用程序通常会将实际 JPEG 旋转到默认方向。

您将捕获的图片加载到 ImageView 的代码当前会忽略此标记。您可以使用ExifInterface.getAttributeInt(TAG_ORIENTATION) 从文件或输入流中提取方向。或者,如果您捕获图像并立即显示它,您可以直接从传感器获取设备方向。现在是时候决定相机将图像存储为纵向(即宽度小于高度)还是横向,在这种情况下,您有责任将其旋转以进行显示。不要根据这个方向旋转位图。相反,您可以调用 imagePreview.setImageMatrix() 来正确显示图像。

顺便说一句,如果您只需要将 JPEG 解码为内存中的全尺寸位图,请不要将其传递给您的 ImageView:这可能会消耗过多的 RAM。最简单的方法是致电setImageURI()

【讨论】:

  • 谢谢,我使用 Glide 将图像显示到 ImageView。 Glide.with(this).asBitmap().load(File(file.toString())).into(imagePreview)。但Xaomi Note 5:显示正常,但Sony xp:旋转90。如果我将方向设置为Sony XP,它会显示正常,但Xaomi 不正常。你能解决这个问题吗?
  • 不能盲目的设置ImageView的旋转。您可以禁用 captureStillPicture() 中的代码以不设置 CaptureRequest.JPEG_ORIENTATION。然后所有设备将位于同一地面上。不幸的是,这意味着在纵向模式下,所有人都会以错误的方向存储图片。或者,您可以检查 Jpeg 参数以了解设备在存储文件时是否实际旋转了 Jpeg。如果 Jpeg 的宽度大于其高度,并且您希望是纵向图像,则添加旋转矩阵。
猜你喜欢
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多