安卓開發之自定義相機時圖片變形問題
阿新 • • 發佈:2019-01-27
在開發的過程中哦鞥到了一個在預覽的時候預覽中的圖片一直在變形,所以在網上查了一個方法,記錄下來:
首先是要獲取一個最適合的預覽尺寸
/**
* 通過對比得到與寬高比最接近的尺寸(如果有相同尺寸,優先選擇)
* @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;
}