Samsung Galaxy SIII的问题 - Camera.onPictureTaken()返回隔行扫描图像而不是正确的捕获图像

Gar*_* S. 2 android android-camera galaxy

我们有一个应用程序,利用后部'相机'来捕获项目图像.到目前为止,我们测试过的所有设备在捕获图像方面都能正常工作,直到三星Galaxy SIII(S3).

仅在三星Galaxy SIII上,我们观察到Camera.onPictureTaken()正在返回一个原始图像,显示为隔行扫描而不是正确的捕获图像.调试每个摄像机参数设置,确定以下参数设置器导致问题.如果我们没有在参数上显式setPictureSize(),那么它按预期工作:

parameters.setPictureSize(targetPictureSize);  
Run Code Online (Sandbox Code Playgroud)

默认情况下,参数.getPictureSize()以[w,h] = [3264,2448]的形式返回

'targetPictureSize'是根据最接近的匹配尺寸从下面返回来确定的,在这种情况下,我们使用[w,h] = [1600,1200]大小作为'targetPictureSize'

camera.getParameters().getSupportedPictureSizes();
Run Code Online (Sandbox Code Playgroud)

有人知道原因和解决方法吗?

Ant*_*n G 6

camera.setParameters预览处于活动状态时,使用与先前配置的图片大小不同(或默认值)调用时,会出现此问题.解决方案是在开始预览或停止预览之前设置图片大小,设置参数,然后重新开始预览.

parameters.setPictureSize(1600, 1200);
...
camera.stopPreview();
camera.setParameters(parameters);
camera.startPreview();
Run Code Online (Sandbox Code Playgroud)

技术说明:

隔行扫描的原因似乎是从相机返回的图像以默认分辨率(3264x2448)捕获,但标记为您使用setPictureSize指定的分辨率.结果,当显示这样的图像时,来自捕获图像的每行像素被显示为(默认分辨率/指定分辨率)像素行.如果图像尺寸为1600x1200,则会导致图像出现隔行扫描,而在其他分辨率(例如640x480)下,图像将显示完全损坏.