Android Camera开发分辨率 清晰度 图像变形

设置了previewSize和pictureSize:
但是通过打Log看出当时设置的时候分辨率是改变了的,然而正是拍照的时候分辨率又变回系统默认的了,在不同的机子上默认的分辨率不同。
setParameters failed 问题 我的华为的默认的previewSize是最高的,然而pictureSize又是最低的:
致预览的图片十分清晰,而拍出的照片十分小且模糊。
同样使用默认分辨率,在一些机子上会出现预览变形的情况 

1.设置预览分辨路和图片分辨率:

Camera.Parameters param = camera.getParameters();
param.setPreviewSize(width, height); //width一般大于height
     setParameters failed问题解决:
param.setPictureSize(width, height);//width一般大于height
        setParameters failed问题解决:


camera.setPerviewSize(screenWidth,screenHeight);// 不要这样设置,不然不会设置成功的;

camera.setPerviewSize(screenHeight , screenWidth );//应该这样设置,第一个参数大于后面那个参数

 params.set("orientation", "landscape");//这样设置也可以

camera.setDisplayOrientation(90);//相机旋转90度,便成竖屏

camera.setParameters(param);//这句话不要忘记


2. setParameters failed问题解决:

java.lang.RuntimeException: setParameters failed
 at android.hardware.Camera.native_setParameters(Native Method)
 at android.hardware.Camera.setParameters(Camera.java:1834)


3.width一般大于height,因为默认的摄像头是横向的,在我们预览的时候也要设置

camera.setDisplayOrientation(90);


4.预览变形解决:
一般手机屏幕分辨率为16:9,而可能默认的预览分辨率是4:3的,
然而我们在设置布局文件的时候设置的预览界面SurfaceView宽高均为match_parent,让预览界面充满屏幕,
所以自然就会出现预览变形的情况。


通过Context进行:

WindowManager windowManager = mcontext.getWindowManager();
     Display display = windowManager.getDefaultDisplay();
     DisplayMetrics metrics = new DisplayMetrics();
     //获取屏幕的宽和高
     display.getMetrics(metrics);
     screenWidth = metrics.widthPixels;
     screenHeight = metrics.heightPixels;
计算预览分辨率的宽高比:
public String getSurfaceViewSize(int width, int height) {
        if (equalRate(width, height, 1.33f)) {
            return "4:3";
        } else {
            return "16:9";
        }
    }

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

根据分辨率设置SurfaceView的大小:

  /**
     * 根据分辨率设置预览SurfaceView的大小以防止变形
     *
     * @param surfaceSize
     */
    private void setSurfaceViewSize(String surfaceSize) {
        ViewGroup.LayoutParams params = surfaceView.getLayoutParams();
        if (surfaceSize.equals("16:9")) {
            params.height = ViewGroup.LayoutParams.MATCH_PARENT;
        } else if (surfaceSize.equals("4:3")) {
            params.height = 4 * screenWidth / 3;
        }
        surfaceView.setLayoutParams(params);


这样基本就不会变形了,还有些手机可能既不是16:9也不是4:3 的屏幕分辨率,都可以通过计算比例适当缩放使其不变形。







设置了previewSize和pictureSize,但是通过打Log看出当时设置的时候分辨率是改变了的,然而正是拍照的时候分辨率又变回系统默认的了,在不同的机子上默认的分辨率不同。setParameters failed 问题我的华为的默认的previewSize是最高的,然而pictureSize又是最低的,导致预览的图片十分清晰,而拍出的照片十分小且模糊。同样使用默认分辨率,在一些机子上会出现预览变形的情况。

你可能感兴趣的:(Android Camera开发分辨率 清晰度 图像变形)