Проблема с настройкой параметров камеры - PullRequest
1 голос
/ 26 июля 2011

У меня есть приложение для Android, которое работает с камерой.Поэтому после нескольких попыток я начал создавать свою собственную камеру, создав класс, который реализует 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);

Тогда size будет null, и я получу ошибку в этой строке:

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

}

1 Ответ

3 голосов
/ 26 июля 2011

Вы делаете это правильно, у меня есть похожий метод, точно такой же, как ваш, который отлично работает.Единственная причина, по которой я могу представить, что ваш метод потерпел неудачу - это значения ширины и высоты.Проверь их.Также проверьте, правильно ли создан объект mCamera.

Я вижу, что вы вызываете getSupportedPictureSize (), вы пробовали getSupportedPreviewSizes ()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...