在开发的过程中哦鞥到了一个在预览的时候预览中的图片一直在变形,所以在网上查了一个方法,记录下来:
首先是要获取一个最适合的预览尺寸
/**
* 通过对比得到与宽高比最接近的尺寸(如果有相同尺寸,优先选择)
* @return 得到与原宽高比例最接近的尺寸
*/
protected static Point findBestPreviewSizeValue(List<Camera.Size> sizeList){
int bestX = 0;
int bestY = 0;
int size = 0;
for (Camera.Size nowSize : sizeList){
int newX = nowSize.width;
int newY = nowSize.height;
int newSize = Math.abs(newX * newX) + Math.abs(newY * newY);
float ratio = (float) (newY * 1.0 / newX);
if(newSize >= size && ratio != 0.75){//确保图片是16:9
bestX = newX;
bestY = newY;
size = newSize;
}else if(newSize < size){
continue;
}
}
if(bestX > 0 && bestY > 0){
return new Point(bestX,bestY);
}
return null;
}
第二步是将最适合的尺寸设置给相机
try {
//为了适配部分手机setparams失败的问题,失败则不设置
try {
Camera.Parameters parameters = camera.getParameters();
Point bestPreviewSizeValue1 = findBestPreviewSizeValue(parameters.getSupportedPreviewSizes());
parameters.setPreviewSize(bestPreviewSizeValue1.x,bestPreviewSizeValue1.y);
camera.setParameters(parameters);
}catch (Exception e){
LogUtils.logE(TAG,"set parameters fail");
}
//进行横竖屏判断然后对图像进行校正
//如果是竖屏
if(context.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) {
camera.setDisplayOrientation(90);
}else {//如果是横屏
camera.setDisplayOrientation(0);
}
//开启预览
camera.startPreview();
// 2如果要实现连续的自动对焦,这一句必须加
camera.cancelAutoFocus();
} catch (Exception e) {
e.printStackTrace();
camera.release();
camera = null;
}