我试图将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表面的要求?
答案 0 :(得分:0)
我手头没有S6,(如果有的话,this might not be same as yours)。我仍然可以确认800x450是一款非常奇怪的手机相机分辨率。这可能是某些S6设备上的错误,这些错误声称支持此预览大小。
如果是这样的话,我不会感到惊讶:我看到一些来自不同品牌的模型有类似的错误,包括三星Galaxy Nexus错误地报告支持320x240。当我们的应用程序要求QVGA时,该设备(如您的S6)也会生成不同大小的图像。
话虽如此,我还可以考虑一下代码中的错误,例如:如果列出前置摄像头支持的分辨率,并将其中一个应用到后置摄像头。
无论如何,预装的相机应用程序不使用800x450:
答案 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格式不支持的输出尺寸。