您的位置:首页 > 移动开发 > Android开发

android 自定义照相机Camera…

2015-04-13 16:51 441 查看
对于一些手机,像HTC,当自定义Camera时,调用Camera.Parameters的parameters.setPreviewSize(width,
height)方法时,如果width和height为奇数情况下,则会出现黑屏现象,解决办法可参考SDK提供的ApiDemos中关于Camera的例子:

List sizes = parameters.getSupportedPreviewSizes();

Size optimalSize
= getOptimalPreviewSize(sizes, w,
h);
parameters.setPreviewSize(optimalSize.width,
optimalSize.height);

同时,在HTC手机中,设置parameters.setPictureSize(width,height)属性,也会导致黑屏,而在三星手机上则没有问题。还有如果设置setPreviewSize属性的宽高错误的话,拍出的照片也会存在失真等Bug,所以遇到适配问题时,最好的办法就是不设置PreviewSize和PictureSize属性。


getOptimalPreviewSize方法


private Size getOptimalPreviewSize(List sizes, int w, int h)
{

final double
ASPECT_TOLERANCE = 0.05;

double
targetRatio = (double) w / h;

if (sizes ==
null)

return
null;

Size optimalSize
= null;

double minDiff =
Double.MAX_VALUE;

int targetHeight
= h;

// Try to find an
size match aspect ratio and size

for (Size size :
sizes) {

double
ratio = (double) size.width / size.height;

if
(Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE)

continue;

if
(Math.abs(size.height - targetHeight) < minDiff) {

optimalSize
= size;

minDiff
= Math.abs(size.height - targetHeight);

}

}

// Cannot find
the one match the aspect ratio, ignore the requirement

if (optimalSize
== null) {

minDiff
= Double.MAX_VALUE;

for
(Size size : sizes) {

if
(Math.abs(size.height - targetHeight) < minDiff) {

optimalSize
= size;

minDiff
= Math.abs(size.height - targetHeight);

}

}

}

return
optimalSize;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: