java.lang.RuntimeException: setParameters 失败,正在设置相机参数

java.lang.RuntimeException: setParameters failed, while setting the camera parameters

我正在制作相机应用程序。预览图片旋转了 90 度。所以我更改了我的代码并添加了代码来设置相机的正确显示方向。现在,当我 运行 应用程序崩溃时,错误消息是

java.lang.RuntimeException: setParameters failed

我的surfaceChanged(SurfaceHolder holder,int format,int w,int h)和surfaceCreated(SurfaceHolder holder)方法如图所示

public void surfaceChanged(SurfaceHolder holder,int format,int w,int h){
    Camera.Parameters mparameters;
    mholder = holder;
    mparameters = mcamera.getParameters();
    mparameters.setPreviewSize(mpreviewsizewidth,mpreviewsizeheight);
    mparameters.setPictureSize(mpreviewsizewidth,mpreviewsizeheight);
    String mCameraFlashMode = mparameters.getFlashMode();
    if(mCameraFlashMode != null){
        mparameters.setFlashMode(mparameters.FLASH_MODE_ON);
    }
    if(mparameters.getFocusMode() != null) {
        mparameters.setFocusMode(mparameters.FOCUS_MODE_AUTO);
    }
    Display display = ((WindowManager)mcontext.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();

    if(display.getRotation() == Surface.ROTATION_0)
    {
        mparameters.setPreviewSize(mpreviewsizeheight, mpreviewsizewidth);
        mcamera.setDisplayOrientation(90);
    }

    if(display.getRotation() == Surface.ROTATION_90)
    {
        mparameters.setPreviewSize(mpreviewsizewidth, mpreviewsizeheight);
    }

    if(display.getRotation() == Surface.ROTATION_180)
    {
        mparameters.setPreviewSize(mpreviewsizeheight, mpreviewsizewidth);
    }

    if(display.getRotation() == Surface.ROTATION_270)
    {
        mparameters.setPreviewSize(mpreviewsizewidth, mpreviewsizeheight);
        mcamera.setDisplayOrientation(180);
    }

    mcamera.setParameters(mparameters);
    try {
        mcamera.setPreviewDisplay(mholder);
    }catch(IOException e){
        e.printStackTrace();
    }
    mcamera.startPreview();
}

public void surfaceCreated(SurfaceHolder holder){
    mcamera = Camera.open();
    try{
        mcamera.setPreviewDisplay(holder);
        mcamera.setPreviewCallback(this);
    }catch(IOException e){
        mcamera.release();
        mcamera = null;
    }
}

请帮助我如何更正我的代码,以便应用程序在设置相机参数时不会崩溃,并且预览可以以正确的方向显示。

我猜您正在尝试设置 Camera 对象不支持的预览尺寸。 您应该首先获取支持的预览大小列表,以检查您实际可以设置的值。

List<Camera.Size> sizes = cam.getParameters().getSupportedPreviewSizes();