首页 文章

java.lang.RuntimeException:setParameters失败,同时设置摄像头参数

提问于
浏览
0

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

java.lang.RuntimeException:setParameters失败

我的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;
    }
}

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

1 回答

  • 1

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

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

相关问题