发出带有参数设置为摄像头 [英] Issue with setting the parameters to camera

查看:120
本文介绍了发出带有参数设置为摄像头的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个Android应用程序与该摄像头的工作原理。于是几个atempts后,我开始通过创建一个类实现 SurfaceHolder.Callback 建设自己的相机。在这一切的大问题是,在我的方法 surfaceChanged()当我试图设置参数相机,我得到:强制关闭

下面是我的方法是如何的样子:

 公共无效surfaceChanged(SurfaceHolder架,INT格式,诠释W,INT高){
        Log.e(TAGsurfaceChanged);
        如果(M previewRunning){
            mCamera.stop preVIEW();
        }        Camera.Parameters p值= mCamera.getParameters();
        清单<尺寸和GT;尺寸= p.getSupportedPictureSizes();        的System.out.println(利斯塔德parametrii埃斯特urmatoarea:+大小);
        尺寸尺寸= sizes.get(0);
        p.setPictureSize(size.width,size.height);        P.SET previewSize(W,H);
        mCamera.setParameters(P);
        尝试{
            mCamera.set previewDisplay(支架);
        }赶上(IOException异常五){
            // TODO自动生成catch块
            e.printStackTrace();
        }
        mCamera.start preVIEW();
        米previewRunning = TRUE;
    }

如果我尝试上面的方式:

  Camera.Parameters P = mCamera.getParameters();
        清单<尺寸和GT;尺寸= p.getSupportedPictureSizes();
        尺寸尺寸= sizes.get(0);
        p.setPictureSize(size.width,size.height);

然后尺寸,我在这行得到错误:

 尺寸大小= sizes.get(0);

如果我这样做是这样的:

 公共无效surfaceChanged(SurfaceHolder架,INT格式,诠释W,INT高){
            Log.e(TAGsurfaceChanged);
            如果(M previewRunning){
                mCamera.stop preVIEW();
            }            Camera.Parameters p值= mCamera.getParameters();
            P.SET previewSize(W,H);
            mCamera.setParameters(P);
            尝试{
                mCamera.set previewDisplay(支架);
            }赶上(IOException异常五){
                // TODO自动生成catch块
                e.printStackTrace();
            }
            mCamera.start preVIEW();
            米previewRunning = TRUE;
        }

我收到以下错误:

 致命异常:主要
了java.lang.RuntimeException:setParameters失败
在android.hardware.Camera.native_setParameters(本机方法)
在android.hardware.Camera.setParameters(Camera.java:914)
在com.SplashScreen.EditPhoto.surfaceChanged(EditPhoto.java:535)
在android.view.SurfaceView.updateWindow(SurfaceView.java:554)
在android.view.SurfaceView.dispatchDraw(SurfaceView.java:353)
在android.view.ViewGroup.drawChild(ViewGroup.java:1719)
在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1448)
在android.view.ViewGroup.drawChild(ViewGroup.java:1719)
在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1448)
在android.view.View.draw(View.java:6971)
在android.widget.FrameLayout.draw(FrameLayout.java:361)

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

修改:这是我实例化我的相机:

 公共无效surfaceCreated(SurfaceHolder持有人){
    Log.e(TAGsurfaceCreated);
    mCamera = Camera.open();}


解决方案

您正在做正确的方式,我有一个类似的方法,酷似你的,完美的作品。我能想象你的​​方法失败的唯一原因是宽度和高度值。检查出来。还检查mCamera对象正确实例。

我看到你打电话getSupportedPictureSize(),你尝试过ge​​tSupported previewSizes()?

干杯

I'm have an android app which works with the camera. So after a few atempts I started building my own camera by creating a class that implements SurfaceHolder.Callback. The big problem in all this is that in my method surfaceChanged() when I'm trying to set the parameters to the camera I get: FORCE CLOSE.

Here is how my method looks like:

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

If I try the above way:

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

Then size is null and I get error at this line:

Size size = sizes.get(0);

If I do this way:

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

I get the following error:

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)

So what's the proper way to set parameters?Thank you!

EDIT: This is how I instantiate my camera:

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

}

解决方案

You're doing it the proper way, I have a similar method, exactly like yours, that works perfectly. The only reason I could imagine for your method to fail are the width and height values. Check them out. Check also if the mCamera object is properly instantiated.

I see that you call getSupportedPictureSize(), have you tried getSupportedPreviewSizes() ?

Cheers

这篇关于发出带有参数设置为摄像头的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆