2

我们有一个利用后置“摄像头”捕捉物品图像的应用程序。到目前为止,我们测试过的所有设备都可以正常拍摄图像,直到三星 Galaxy SIII (S3)。

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

parameters.setPictureSize(targetPictureSize);  

默认参数.getPictureSize() 返回 [w,h]=[3264, 2448]

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

camera.getParameters().getSupportedPictureSizes();

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

4

2 回答 2

6

camera.setParameters当您在预览处于活动状态时使用与之前配置的(或默认值)不同的图片大小进行调用时,似乎会发生此问题。解决方法是在开始预览或停止预览之前先设置好图片大小,设置好参数,然后重新开始预览。

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

技术说明:

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

于 2013-02-18T19:33:54.273 回答
0

我想这不会有一个好的答案或理由。我只能责怪三星没有正确实现 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.
       }
于 2012-08-28T18:44:54.377 回答