1

我正在尝试从设置为特定分辨率的 ImageReader 读取图像(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP当然是从中获得的),但ImageReader.acquireLastestImage返回的是不同分辨率的图像!

注意:这仅在三星 Galaxy S6 上发生(据我所知),预览分辨率设置为800x450,图像上的输出分辨率显然是 640x480。其他分辨率似乎很好,以及其他手机。

相关代码:

Image im = mReader.acquireLatestImage();
Log.v(TAG, String.format("Image       size %d x %d", im.getWidth(), im.getHeight()));
Log.v(TAG, String.format("ImageReader size %d x %d", mReader.getWidth(), mReader.getHeight()));

输出日志:

01-30 15:43:46.350 31422-31954/com.myapp V/ImageProcessor: Image       size 640 x 480
01-30 15:43:46.350 31422-31954/com.myapp V/ImageProcessor: ImageReader size 800 x 450

有什么问题?Android中的错误?Galaxy S6 实施中的错误?

不保证相机会遵守 ImageReader 表面的要求吗?

4

2 回答 2

0

问题可能是您正在阅读“错误”的输出大小。尝试使用与ImageFormat初始化 ImageReader 时相同的输出大小。

因此,例如,如果您使用初始化 ImageReader

ImageReader.newInstance(width, height, ImageFormat.JPEG, 1)

获取可用的输出大小

cameraCharacteristics
  .get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP)
  .getOutputSizes(ImageFormat.JPEG)

在我的情况下,我使用ImageReader.class而不是ImageFormat.JPEG获取可用的输出大小,因此我收到了一些 JPEG 格式不支持的输出大小。

于 2018-09-24T10:07:48.683 回答
0

我手头没有 S6,(如果我有,这可能和你的不一样)。我仍然可以确认 800x450 对于手机摄像头来说是一个非常奇怪的分辨率。这可能是某些 S6 设备上的错误,它虚假地声称支持此预览大小。

如果是这样,我不会感到惊讶:我已经看到来自不同品牌的一些型号有类似的错误,包括三星 Galaxy Nexus,它错误地报告了对 320x240 的支持。当我们的应用程序要求 QVGA 时,该设备(如您的 S6)也会生成不同大小的图像。

话虽如此,我还可以考虑您的代码中的一个错误,例如,如果您列出了前置摄像头支持的分辨率,并将其中一个应用于后置摄像头。

无论如何,预装的相机应用程序不使用 800x450:

后部

S6前

于 2018-01-31T20:19:09.583 回答