欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android自定义照相机Camera出现黑屏的解决方法

程序员文章站 2024-03-06 12:02:19
本文实例讲述了android自定义照相机camera出现黑屏的解决方法。分享给大家供大家参考,具体如下: 对于一些手机,像htc,当自定义camera时,调用camera...

本文实例讲述了android自定义照相机camera出现黑屏的解决方法。分享给大家供大家参考,具体如下:

对于一些手机,像htc,当自定义camera时,调用camera.parameters的 parameters.setpreviewsize(width, height)方法时,如果width和height为奇数情况下,则会出现黑屏现象,解决办法可参考sdk提供的apidemos中关于camera的 例子:

list<size> 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<size> 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;
}

更多关于android相关内容感兴趣的读者可查看本站专题:《android拍照与图片处理技巧总结》、《android开发入门与进阶教程》、《android多媒体操作技巧汇总(音频,视频,录音等)》、《android基本组件用法总结》、《android视图view技巧总结》、《android布局layout技巧总结》及《android控件用法总结

希望本文所述对大家android程序设计有所帮助。