在自定义相机预览时,有时候会发现图片有点变形,但是拍的照片木有问题,经过好长时间的研究之后,终于找到了一个最适合的解决办法:
设置预览参数
List<Size> sizes = parameters.getSupportedPreviewSizes();
Size optimalSize = getOptimalPreviewSize(sizes,
getResources().getDisplayMetrics().widthPixels,
getResources().getDisplayMetrics().heightPixels);
parameters.setPreviewSize(optimalSize.width,optimalSize.height);
camera.setParameters(parameters);
通过各种计算,获取最佳预览size
private Camera.Size getOptimalPreviewSize(List<Camera.Size> sizes, int w,int h) {
final double ASPECT_TOLERANCE = 0.1;
double targetRatio = (double) h / w;
if (sizes == null)
return null;
Camera.Size optimalSize = null;
double minDiff = Double.MAX_VALUE;
int targetHeight = h;
for (Camera.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);
}
}
if (optimalSize == null) {
minDiff = Double.MAX_VALUE;
for (Camera.Size size : sizes) {
if (Math.abs(size.height - targetHeight) < minDiff) {
optimalSize = size;
minDiff = Math.abs(size.height - targetHeight);
}
}
}
return optimalSize;
}
有问题及时交流 QQ 2240405944