Сбой при попытке создания изображения в Android

#java #android #camera

#java #Android #камера

Вопрос:

Привет, я создаю API для управления камерой в Android. Я выполняю функцию для получения изображений, но у меня возникает эта ошибка в logcat при попытке создания изображения:

 06-18 09:25:44.319: E/AndroidRuntime(2918): FATAL EXCEPTION: main
06-18 09:25:44.319: E/AndroidRuntime(2918): Process: org.gradiant.democamera, PID: 2918
06-18 09:25:44.319: E/AndroidRuntime(2918): java.lang.IllegalStateException: Could not execute method of the activity
06-18 09:25:44.319: E/AndroidRuntime(2918):     at android.view.View$1.onClick(View.java:3823)
06-18 09:25:44.319: E/AndroidRuntime(2918):     at android.view.View.performClick(View.java:4438)
06-18 09:25:44.319: E/AndroidRuntime(2918):     at android.view.View$PerformClick.run(View.java:18422)
06-18 09:25:44.319: E/AndroidRuntime(2918):     at android.os.Handler.handleCallback(Handler.java:733)
06-18 09:25:44.319: E/AndroidRuntime(2918):     at android.os.Handler.dispatchMessage(Handler.java:95)
06-18 09:25:44.319: E/AndroidRuntime(2918):     at android.os.Looper.loop(Looper.java:136)
06-18 09:25:44.319: E/AndroidRuntime(2918):     at android.app.ActivityThread.main(ActivityThread.java:5001)
06-18 09:25:44.319: E/AndroidRuntime(2918):     at java.lang.reflect.Method.invokeNative(Native Method)
06-18 09:25:44.319: E/AndroidRuntime(2918):     at java.lang.reflect.Method.invoke(Method.java:515)
06-18 09:25:44.319: E/AndroidRuntime(2918):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
06-18 09:25:44.319: E/AndroidRuntime(2918):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
06-18 09:25:44.319: E/AndroidRuntime(2918):     at dalvik.system.NativeStart.main(Native Method)
06-18 09:25:44.319: E/AndroidRuntime(2918): Caused by: java.lang.reflect.InvocationTargetException
06-18 09:25:44.319: E/AndroidRuntime(2918):     at java.lang.reflect.Method.invokeNative(Native Method)
06-18 09:25:44.319: E/AndroidRuntime(2918):     at java.lang.reflect.Method.invoke(Method.java:515)
06-18 09:25:44.319: E/AndroidRuntime(2918):     at android.view.View$1.onClick(View.java:3818)
06-18 09:25:44.319: E/AndroidRuntime(2918):     ... 11 more
06-18 09:25:44.319: E/AndroidRuntime(2918): Caused by: java.lang.RuntimeException: takePicture failed
06-18 09:25:44.319: E/AndroidRuntime(2918):     at android.hardware.Camera.native_takePicture(Native Method)
06-18 09:25:44.319: E/AndroidRuntime(2918):     at android.hardware.Camera.takePicture(Camera.java:1245)
06-18 09:25:44.319: E/AndroidRuntime(2918):     at android.hardware.Camera.takePicture(Camera.java:1190)
06-18 09:25:44.319: E/AndroidRuntime(2918):     at org.gradiant.camara.CameraAcquisition.GetImage(CameraAcquisition.java:146)
06-18 09:25:44.319: E/AndroidRuntime(2918):     at org.gradiant.democamera.MainActivity.getFrame(MainActivity.java:30)
06-18 09:25:44.319: E/AndroidRuntime(2918):     ... 14 more
  

Это мой код для этого:

 public void GetImage() {

        mCamera = StartCapture();
        mCamera.startPreview();
        mCamera.takePicture(null, null, new PictureCallback() {

            @Override
            public void onPictureTaken(byte[] data, Camera camera) {
                // TODO Auto-generated method stub

            }
        });

    }

    public Camera StartCapture() {

        int cameraCount = 0;
        Camera cam = null;
        Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
        cameraCount = Camera.getNumberOfCameras();

        for (int camIdx = 0; camIdx < cameraCount; camIdx  ) {
            Camera.getCameraInfo(camIdx, cameraInfo);
            if (cameraInfo.facing == camera_used) {
                try {
                    cam = Camera.open(camIdx);
                    android.hardware.Camera.CameraInfo info = new android.hardware.Camera.CameraInfo();
                    android.hardware.Camera.getCameraInfo(camIdx, info);
                    int rotation = ((Activity) context_class)
                            .getWindowManager().getDefaultDisplay()
                            .getRotation();
                    int degrees = 0;
                    switch (rotation) {
                    case Surface.ROTATION_0:
                        degrees = 0;
                        break;
                    case Surface.ROTATION_90:
                        degrees = 90;
                        break;
                    case Surface.ROTATION_180:
                        degrees = 180;
                        break;
                    case Surface.ROTATION_270:
                        degrees = 270;
                        break;
                    }
                    int resu<
                    if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
                        result = (info.orientation   degrees) % 360;
                        result = (360 - result) % 360; // compensate the mirror
                    } else { // back-facing
                        result = (info.orientation - degrees   360) % 360;
                    }
                    cam.setDisplayOrientation(result);

                    // other options, as resolution, format, etc
                    Camera.Parameters params = mCamera.getParameters();
                    mCamera.setParameters(params);

                } catch (RuntimeException e) {
                }
            }
        }

        return cam;

    }
  

В чем проблема? Что я делаю не так?

Спасибо

Редактировать:

Согласно комментариям, это две конфликтующие строки:

В MainActivity:

 camera.GetImage();
  

При вызове метода и в методе:

 mCamera.takePicture(null, null, new PictureCallback()
  

Комментарии:

1. дважды щелкните по этой последней строке в org.gradiant.democamera. MainActivity.getFrame(MainActivity.java:30) и посмотрите, в какой строке возникла проблема в вашей деятельности

2. пожалуйста, отправьте строку с номером 30 в MainActivity.java и строка 146 в CameraAcquisition.java . согласно вашему logcat, они, похоже, связаны с проблемой…

3. это когда в вызове getImage(); функция, конкретно строка mCamera.startPreview();