Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将参数设置为摄影机时出现问题_Android_Camera - Fatal编程技术网

Android 将参数设置为摄影机时出现问题

Android 将参数设置为摄影机时出现问题,android,camera,Android,Camera,我有一个安卓应用程序,可以与相机配合使用。因此,在几次尝试之后,我开始创建一个类来实现SurfaceHolder.Callback,从而构建自己的相机。所有这一切的最大问题是,在我的方法surfacechange()中,当我试图设置相机的参数时,我得到了:强制关闭 我的方法是这样的: public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { Log.e(TAG, "surfaceCha

我有一个安卓应用程序,可以与相机配合使用。因此,在几次尝试之后,我开始创建一个类来实现
SurfaceHolder.Callback
,从而构建自己的相机。所有这一切的最大问题是,在我的方法
surfacechange()
中,当我试图设置相机的参数时,我得到了:强制关闭

我的方法是这样的:

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;
    }
如果我这样做:

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

}

你这样做是正确的,我有一个类似的方法,和你的完全一样,非常有效。我能想象的方法失败的唯一原因是宽度和高度值。看看他们。还要检查mCamera对象是否正确实例化

我看到您调用了getSupportedPictureSize(),您尝试过getSupportedPreviewSizes()吗


为模拟器干杯

对我来说也很好。在索尼爱立信(Sony Ericsson)的物理设备上,在设置参数时它崩溃了,当我做类似的事情时:Camera.parameters p=mCamera.getParameters();p、 设置预览大小(w,h);mCamera.setParameters(p);没有任何线索。如果我从我的代码中删除那一行,它就会工作。但是图片很小:Pmy point是,如果你想增加预览的大小,你应该设置一些值。。。试试像这样的p.setPreviewSize(640480);是的,预览会变大。但是图片大小我不能变大。如果我输入的值大于此值:p.setPictureSize(213350),我的模拟器会崩溃!!!!而且这个设备不支持这一行:p.setParameteres()我也在我的问题中添加了我实例化相机的方式!
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();

}