gpt4 book ai didi

android - 如何为我的 Android 相机应用程序选择 ImageReader 缓冲区类型?

转载 作者:太空狗 更新时间:2023-10-29 13:53:43 26 4
gpt4 key购买 nike

我有一个带有相机功能的应用程序。我正在使用 Android Camera2 API。我发现如果将 ImageReader 配置为提供 JPEG,某些 Android 设备(例如 Nexus 6p、Nexus 5)会工作得更好:

imageReader = ImageReader.NewInstance(width, height, ImageFormatType.Jpeg, 2);

如果 ImageReader 配置为提供,例如 RGBA_8888,一些 Android 设备(例如 Nexus 7 2013)工作得更好:

imageReader = ImageReader.NewInstance(width, height, (ImageFormatType)1 /* PixelFormat.RGBA_8888 */, 2);

如果我使用 RGBA_8888,则与 JPEG 配合得更好的设备会出现此错误:

[ImageReader_JNI] Producer output buffer format: 0x22, ImageReader configured format: 0x1

如果我使用 JPEG,与 RGBA 缓冲区一起工作得更好的设备会发出此警告:(它仍然可以工作,但速度太慢以至于捕获的图片很暗。)

[ImageReader_JNI] ImageReader_lockedImageSetup: Receiving JPEG in HAL_PIXEL_FORMAT_RGBA_8888 buffer.

我必须对返回的内容进行一些处理,所以最终如果我可以将相机配置为仅吐出某种位图而不是 JPEG 会更好,因为我必须将 JPEG 转换为 位图,然后继续。

我应该如何选择要传递给 ImageReader 的缓冲区类型?

最佳答案

所有相机设备必须支持的唯一保证格式是 YUV_420_888 和 JPEG;即便如此,LEGACY 级别的设备通常仅支持最大分辨率的 JPEG(以及预览分辨率下的 YUV_420_888,通常不高于 1080p)。

您应该在设备的 StreamConfigurationMap 中检查支持的格式列表而不是盲目地尝试一些 - 虽然某些设备可能支持未在其官方列表中列出的随机格式,但并不能保证它们的效果如何。

JPEG 捕获往往较慢,因为 LEGACY 级别的设备假定当您需要 JPEG 时,您需要最大的静态捕获质量,这需要比预览帧更多的后期处理;另外,LEGACY 设备可能会进行闪光测光和闪光。 LIMITED 或更好的设备允许您控制后处理质量,因此它不受输出格式的限制,并且通常还支持更高分辨率的 YUV 捕获。

如果你想要广泛的支持,我通常会远离 RGBA - 它与 LEGACY 设备一起工作有点怪癖,LIMITED 和更好的设备不太可能支持它。

当您说 JPEG 可以工作,但速度太慢以至于捕获的图像很暗时,我有点困惑 - 为什么慢意味着图像很暗?还是您的意思是图像变暗?

关于android - 如何为我的 Android 相机应用程序选择 ImageReader 缓冲区类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42103187/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com