我们必须利用后“相机”拍摄物品图像的应用程序。 到目前为止,我们已经测试了所有的设备都在捕捉的图像,因为它应该是长期正常工作,直到三星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();
任何人都知道的原因和解决方法?
这个问题出现,当你调用发生camera.setParameters
用不同pictureSize比以前配置(或默认值),而预览处于活动状态。 解决的办法是在开始预览或停止预览,设定参数,然后重新启动预览之前醚设置图像尺寸。
parameters.setPictureSize(1600, 1200);
...
camera.stopPreview();
camera.setParameters(parameters);
camera.startPreview();
技术说明:
交错的原因似乎是从相机返回的图像是在默认分辨率(3264X2448)抓获,但被标记为您setPictureSize指定的分辨率。 其结果是,正被显示这样的图像的情况下,从所拍摄的图像的像素的每一行被显示为像素(默认分辨率/指定的分辨率)的行。 随着1600×1200的图片大小,这将导致图像中出现的隔行扫描,而在其他分辨率(例如,640×480)的图像会出现完全损坏。
我想,有没有打算一个很好的答案或原因。 我只能指责三星不能正确实现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