问题与三星Galaxy SIII - Camera.onPictureTaken()再次隔行扫描

2019-07-31 04:59发布

我们必须利用后“相机”拍摄物品图像的应用程序。 到目前为止,我们已经测试了所有的设备都在捕捉的图像,因为它应该是长期正常工作,直到三星Galaxy SIII(S3)。

在三星Galaxy SIII而已,我们观察到Camera.onPictureTaken()被返回的原始图像看起来隔行扫描,而不是正确的捕捉图像。 调试每个摄像机的参数设置,确定以下参数设定器造成问题。 如果我们没有明确setPictureSize()的参数,然后将其按预期工作:

parameters.setPictureSize(targetPictureSize);  

默认情况下parameters.getPictureSize()返回为[W,H] = [3264,2448]

在“targetPictureSize”是从下面最接近匹配的尺寸返回确定的基础,在这种情况下,我们已经使用了[W,H] = [1600,1200]的大小为“targetPictureSize”

camera.getParameters().getSupportedPictureSizes();

任何人都知道的原因和解决方法?

Answer 1:

这个问题出现,当你调用发生camera.setParameters用不同pictureSize比以前配置(或默认值),而预览处于活动状态。 解决的办法是在开始预览或停止预览,设定参数,然后重新启动预览之前醚设置图像尺寸。

parameters.setPictureSize(1600, 1200);
...
camera.stopPreview();
camera.setParameters(parameters);
camera.startPreview();

技术说明:

交错的原因似乎是从相机返回的图像是在默认分辨率(3264X2448)抓获,但被标记为您setPictureSize指定的分辨率。 其结果是,正被显示这样的图像的情况下,从所拍摄的图像的像素的每一行被显示为像素(默认分辨率/指定的分辨率)的行。 随着1600×1200的图片大小,这将导致图像中出现的隔行扫描,而在其他分辨率(例如,640×480)的图像会出现完全损坏。



Answer 2:

我想,有没有打算一个很好的答案或原因。 我只能指责三星不能正确实现Camera.getParameters()。setPictureSize()。

下面是我的解决方法通过检查S3型号名称,而不是调用setPictureSize()

       // Source - http://en.wikipedia.org/wiki/Samsung_Galaxy_S_III
       String s3ModelNames[] = { "XXXXXXXXXXXXXXXX", // Place holder
                "SAMSUNG-SGH-I747", // AT&T
                "SAMSUNG-SGH-T999", // T-Mobile
                "SAMSUNG-SGH-N064", // Japan
                "SAMSUNG-SCH-R530", // US Cellular
                "SAMSUNG-SCH-I535", // Verizon
                "SAMSUNG-SPH-L710", // Sprint
                "SAMSUNG-GT-I9300", // International
                "SGH-I747", // AT&T
                "SGH-T999", // T-Mobile
                "SGH-N064", // Japan
                "SCH-R530", // US Cellular
                "SCH-I535", // Verizon
                "SPH-L710", // Sprint
                "GT-I9300"  // International
       };

       List<String> s3ModelList = Arrays.asList(s3ModelNames);

       if (s3ModelList.contains(deviceModel)) {
          // DEVICE SPECIFIC WORK AROUND for Samsung Galaxy S3
          // SKIP calling parameters.setPictureSize() Samsung Galaxy SIII phone (Confirmed on AT&T, Verizon, Sprint) due the Camera image are interlaced when setPictureSize() are set to other than default.
       }


文章来源: Issue with Samsung Galaxy SIII - Camera.onPictureTaken() returning interlaced image instead of proper capture image