【发布时间】:2017-02-08 01:37:41
【问题描述】:
我有一个带有相机功能的应用程序。我正在使用 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 转换为 @ 987654329@,然后继续。
我应该如何选择传递给ImageReader的缓冲区类型?
【问题讨论】:
-
您的用例是什么?单张快照(每秒捕捉次数不多)还是连续捕捉(~30fps)?
-
我有一个预览界面,它可以连续捕捉,直到你点击拍照按钮,此时它会单次捕捉到
ImageReader。
标签: android android-camera android-camera2