Android SurfaceView预览模糊

Mil*_*ele 6 android surfaceview android-camera

我有一个快速的问题.我正在使用Android的SurfaceView拍照并保存.但是,预览尺寸和图像质量本身都很糟糕; 因为,它非常模糊.根本没有图像质量的清晰度.

这是我初始化surfaceView的地方:

                    camera.setDisplayOrientation(90);
                    Parameters parameters = camera.getParameters();
                    parameters.setWhiteBalance(Camera.Parameters.WHITE_BALANCE_AUTO);
                    parameters.setExposureCompensation(0);
                    parameters.setPictureFormat(ImageFormat.JPEG);
                    parameters.setJpegQuality(100);

                    Camera.Size picSize =   getOptimalPreviewSize(parameters.getSupportedPreviewSizes(),
                            getResources().getDisplayMetrics().widthPixels, 
                            getResources().getDisplayMetrics().heightPixels);

                    parameters.setPictureSize(picSize.width, picSize.height);
                    parameters.setPreviewSize(picSize.width, picSize.height);

                    camera.setParameters(parameters);
                    camera.setPreviewDisplay(holder);
                    camera.startPreview();
Run Code Online (Sandbox Code Playgroud)

getOptimalPreviewSize()返回parameters.getSupportedPreviewSizes()中可用的最佳大小.它返回的尺寸是1280x720,这是我的手机支持的最佳尺寸.但是,surfaceView仍然非常模糊.我正在做什么明显错误,或者有没有办法优化surfaceView?谢谢.

小智 29

您的图像和预览可能会显得模糊,这有两个原因

1)您设置图片大小和预览大小的方式是错误的.您必须查询支持的尺寸并确定最适合您的尺寸,并从您已获得的列表中设置尺寸.你不能给出仲裁价值.查看此示例应用程序以获取实现详细信息 - https://github.com/josnidhin/Android-Camera-Example

2)您必须将相机置于自动模式,以便自动对焦.(更好的是实现触摸以使用适当的ui进行聚焦).一旦你的相机启动,只需设置如下

private void setCamFocusMode(){

    if(null == mCamera) {
        return;
     }

    /* Set Auto focus */ 
    Parameters parameters = mCamera.getParameters();
    List<String>    focusModes = parameters.getSupportedFocusModes();
    if(focusModes.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)){
        parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);   
    } else 
    if(focusModes.contains(Camera.Parameters.FOCUS_MODE_AUTO)){
        parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
    }   

    mCamera.setParameters(parameters);
}
Run Code Online (Sandbox Code Playgroud)

确保您的清单中有适当的权限

希望这可以帮助

问候,羞涩