您的位置:首页 > 编程语言 > PHP开发

解决Camera.parameter.setPreviewSize/Camera.parameter.setPictureSize适应不同手机问题

2014-04-14 11:05 501 查看
解决类:(当然这个也是套用大师的!)
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import android.hardware.Camera;
import android.hardware.Camera.Size;

public class MyCamPara {
private final CameraSizeComparator sizeComparator = new CameraSizeComparator();
private static MyCamPara myCamPara = null;
private MyCamPara(){

}
public static MyCamPara getInstance(){
if(myCamPara == null){
myCamPara = new MyCamPara();
return myCamPara;
}
else{
return myCamPara;
}
}

public  Size getPreviewSize(List<Camera.Size> list, int th){
Collections.sort(list, sizeComparator);
Size size=null;
for(int i=0;i<list.size();i++){
size=list.get(i);
if((size.width>th)&&equalRate(size, 1.3f)){
break;
}
}
return size;
}
public Size getPictureSize(List<Camera.Size> list, int th){
Collections.sort(list, sizeComparator);
Size size=null;
for(int i=0;i<list.size();i++){
size=list.get(i);
if((size.width>th)&&equalRate(size, 1.3f)){
break;
}
}
return size;

}

public boolean equalRate(Size s, float rate){
float r = (float)(s.width)/(float)(s.height);
if(Math.abs(r - rate) <= 0.2)
{
return true;
}
else{
return false;
}
}

public  class CameraSizeComparator implements Comparator<Camera.Size>{
//按升序排列
@Override
public int compare(Size lhs, Size rhs) {
// TODO Auto-generated method stub
if(lhs.width == rhs.width){
return 0;
}
else if(lhs.width > rhs.width){
return 1;
}
else{
return -1;
}
}

}
}

调用方法:

private static Size pictureSize,previewSize;
pictureSize= MyCamPara.getInstance().getPictureSize(parameter.getSupportedPictureSizes(), 800);
//预览大小
previewSize=MyCamPara.getInstance().getPreviewSize(parameter.getSupportedPreviewSizes(), display.getHeight());
if(previewSize!=null)
parameter.setPreviewSize(previewSize.width,previewSize.height);
if(pictureSize!=null)
parameter.setPictureSize(pictureSize.width,pictureSize.height);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐