ImageReader在Galaxy S6上获得与ImageReader本身不同分辨率的gainLastestImage

时间:2018-01-30 13:50:24

标签: android android-image android-camera2 android-image-capture samsung-galaxy-camera

我试图将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表面的要求?

2 个答案:

答案 0 :(得分:0)

我手头没有S6,(如果有的话,this might not be same as yours)。我仍然可以确认800x450是一款非常奇怪的手机相机分辨率。这可能是某些S6设备上的错误,这些错误声称支持此预览大小。

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

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

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

Rear

S6 Front

答案 1 :(得分:0)

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

例如,如果您使用以下内容初始化ImageReader

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

通过以下方式获取可用的输出大小

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

就我而言,在获取可用的输出尺寸时,我使用的是ImageReader.class而不是ImageFormat.JPEG,因此我收到了一些JPEG格式不支持的输出尺寸。