Android SurfaceView预览模糊

Android SurfaceView预览模糊,android,android-camera,surfaceview,Android,Android Camera,Surfaceview,我有一个简短的问题。我正在使用Android的SurfaceView拍照并保存它。然而,预览尺寸和图片质量本身都很糟糕;如中所示,它非常模糊。图像质量根本没有清晰度 这里是我初始化surfaceView的地方: camera.setDisplayOrientation(90); Parameters parameters = camera.getParameters(); pa

我有一个简短的问题。我正在使用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();

getOptimalPreviewSize()返回参数中可用的最佳大小。GetSupportedPreviewSize()。它返回的大小是1280x720,这是我的手机支持的最佳大小。然而,surfaceView仍然非常模糊。我做的有什么明显的错误吗,或者有没有办法优化surfaceView?谢谢

有两个原因使图像和预览看起来模糊

1) 您设置图片大小和预览大小的方式是错误的。您必须查询支持的尺寸,并决定哪种尺寸最适合您,然后从您的列表中设置尺寸。不能给arbit值。检查此示例应用程序以了解实施详细信息-

2) 你必须把你的相机置于自动foucs模式,这样它就会自动对焦。(更好的方法是使用适当的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);
}
private void setCamFocusMode(){
if(null==mCamera){
返回;
}
/*设置自动对焦*/
Parameters=mCamera.getParameters();
List focusModes=parameters.getSupportedFocusModes();
if(focusModes.contains(Camera.Parameters.FOCUS\u MODE\u CONTINUOUS\u PICTURE)){
parameters.setFocusMode(相机.参数.聚焦模式\u连续图像);
}else if(focusModes.contains(Camera.Parameters.FOCUS\u MODE\u AUTO)){
parameters.setFocusMode(相机.参数.聚焦模式自动);
}   
mCamera.setParameters(参数);
}
确保您的舱单中有适当的权限

希望这有帮助

问候,,
Shrish

这帮了大忙。谢谢。嘿,我正在用Surface view播放视频。你能告诉我我是否可以模糊整个表面视图(或者你可以说视频)。如果有其他方法可以做到同样的,请告诉我。