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

时间:2017-05-10 02:52:22

标签: android camera android-camera preview

我正在制作相机应用程序。预览图片旋转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;
    }
}

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

1 个答案:

答案 0 :(得分:1)

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

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