Android SurfaceView 图像拉伸

问题:项目中用了自定义Camera,其中的SurfaceView 里的预览图像被拉长了。

原因:相机所使用的Camera.parameters 的PictureSize 比例与SurfaceView 的比例不一致

解决方案:

1.从相机属性中选取一个合适比例的图像参数.并通知Camera  mCamera.setParameters(mParams);

/**
	 * @param sizes 相机支持的尺寸
	 * @param whRadio 宽高比
	 * @return 合适的Size
	 */
	public  Size getPropPreviewSize(List sizes,float whRadio){
		Collections.sort(sizes, sizeComparator);//排序一下
		int i = 0;
		for (Size size : sizes) {
			float radio=(float)size.width / size.height;
			if (Math.abs(radio-whRadio)
2.在SurfaceView 的surfaceChanged 方法中设置SurfaceView 的大小:
WindowManager wm = (WindowManager)getContext().getSystemService(Context.WINDOW_SERVICE);
		int w = wm.getDefaultDisplay().getWidth();
mSurfaceView.setLayoutParams(new FrameLayout.LayoutParams(x,x/whRadio));//  x/whRadio:x除以宽高比得到高度h

3.重新开启预览
 

你可能感兴趣的:(android)