【问题标题】:Issue with setting the parameters to camera将参数设置为相机的问题
【发布时间】:2011-07-26 13:27:29
【问题描述】:

我有一个适用于相机的安卓应用。所以经过几次尝试后,我开始通过创建一个实现SurfaceHolder.Callback 的类来构建自己的相机。所有这一切的最大问题是,在我的方法surfaceChanged() 中,当我尝试为相机设置参数时,我得到:FORCE CLOSE。

这是我的方法的样子:

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
        Log.e(TAG, "surfaceChanged");
        if (mPreviewRunning) {
            mCamera.stopPreview();
        }

        Camera.Parameters p = mCamera.getParameters();
        List<Size> sizes = p.getSupportedPictureSizes();

        System.out.println("Lista de parametrii este urmatoarea:"+sizes);
        Size   size = sizes.get(0);
        p.setPictureSize(size.width, size.height);

        p.setPreviewSize(w, h);
        mCamera.setParameters(p);
        try {
            mCamera.setPreviewDisplay(holder);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        mCamera.startPreview();
        mPreviewRunning = true;
    }

如果我尝试上述方法:

Camera.Parameters p = mCamera.getParameters();
        List<Size> sizes = p.getSupportedPictureSizes();
        Size   size = sizes.get(0);
        p.setPictureSize(size.width, size.height);

然后sizenull 我在这一行得到错误:

Size size = sizes.get(0);

如果我这样做:

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
            Log.e(TAG, "surfaceChanged");
            if (mPreviewRunning) {
                mCamera.stopPreview();
            }

            Camera.Parameters p = mCamera.getParameters();
            p.setPreviewSize(w, h);
            mCamera.setParameters(p);
            try {
                mCamera.setPreviewDisplay(holder);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            mCamera.startPreview();
            mPreviewRunning = true;
        }

我收到以下错误:

FATAL EXCEPTION: main
java.lang.RuntimeException: setParameters failed
at android.hardware.Camera.native_setParameters(Native Method)
at android.hardware.Camera.setParameters(Camera.java:914)
at com.SplashScreen.EditPhoto.surfaceChanged(EditPhoto.java:535)
at android.view.SurfaceView.updateWindow(SurfaceView.java:554)
at android.view.SurfaceView.dispatchDraw(SurfaceView.java:353)
at android.view.ViewGroup.drawChild(ViewGroup.java:1719)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1448)
at android.view.ViewGroup.drawChild(ViewGroup.java:1719)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1448)
at android.view.View.draw(View.java:6971)
at android.widget.FrameLayout.draw(FrameLayout.java:361)

那么设置参数的正确方法是什么?谢谢!

编辑:这就是我实例化我的相机的方式:

public void surfaceCreated(SurfaceHolder holder) {
    Log.e(TAG, "surfaceCreated");
    mCamera = Camera.open();

}

【问题讨论】:

    标签: android camera


    【解决方案1】:

    你的做法是正确的,我有一个类似的方法,和你的一模一样,效果很好。我可以想象您的方法失败的唯一原因是宽度和高度值。去看一下。还要检查 mCamera 对象是否已正确实例化。

    我看到你调用了 getSupportedPictureSize(),你试过 getSupportedPreviewSizes() 吗?

    干杯

    【讨论】:

    • 在模拟器上对我也很有效。在索尼爱立信的物理设备上,它在设置参数时崩溃,当我在做类似的事情时:Camera.Parameters p = mCamera.getParameters( ); p.setPreviewSize(w, h); mCamera.setParameters(p);
    • 没有任何线索。如果我从代码中删除该行,那么它可以工作..但图片很小:P
    • 我的意思是,如果你想增加预览的大小,你应该将值设置为……试试这样的 p.setPreviewSize(640, 480);
    • 是的,预览变大了。但是图片尺寸我不能变大。如果我输入比这更大的值:p.setPictureSize(213,350),我的模拟器崩溃了!!!!!!设备不支持这一行:p.setParameteres()
    • 我还以实例化相机的方式添加到我的问题中!
    猜你喜欢
    • 2011-02-08
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 2012-07-10
    • 2013-08-03
    相关资源
    最近更新 更多