【问题标题】:Android SurfaceView Preview BlurryAndroid SurfaceView 预览模糊
【发布时间】:2015-01-17 05:41:18
【问题描述】:

我有一个简单的问题。我正在使用 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() 从 parameters.getSupportedPreviewSizes() 返回最佳尺寸。它返回的尺寸是 1280x720,这是我的手机支持的最佳尺寸。但是,surfaceView 还是很模糊的。我在做什么明显错误,或者有没有办法优化surfaceView?谢谢。

【问题讨论】:

    标签: android android-camera surfaceview


    【解决方案1】:

    您的图像和预览可能看起来模糊有两个原因

    1) 你设置图片大小和预览大小的方式不对。您必须查询支持的尺寸并确定最适合您的尺寸并从您拥有的列表中设置尺寸。你不能给出仲裁值。检查此示例应用程序以了解实施细节 - https://github.com/josnidhin/Android-Camera-Example

    2) 您必须将相机置于自动对焦模式,以便自动对焦。 (更好的是使用适当的用户界面实现触摸以聚焦)。相机启动后,只需设置以下内容

    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);
    }
    

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

    希望对你有帮助

    问候, 虾肉

    【讨论】:

    • 这很有帮助。谢谢。
    • 你好,我正在使用 Surface 视图播放视频。你能告诉我我是否可以模糊整个表面视图(或者你可以说视频)。如果有任何其他方法可以做到这一点,请告诉我。
    猜你喜欢
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多