无法使用前置摄像头拍摄图像:Android

时间:2014-03-10 16:26:06

标签: android android-camera

我无法使用前置摄像头拍照。我的测试设备肯定有前后摄像头/功能。出于某种原因,图片仅与后置摄像头一起拍摄。这就是我所拥有的。注意:摄像头和参数是全局设置的。

@Override
   public void surfaceCreated(SurfaceHolder holder)
   {

            camera = Camera.open();
            parameter = camera.getParameters();

            Camera.Size size = getBestPreviewSize(surfaceView.getWidth(), surfaceView.getHeight(), parameter);
            parameter.setPreviewSize(size.width, size.height);

            try {
                camera.setPreviewDisplay(surfaceHolder);
            } catch (Throwable ignored) {
                Log.e(TAG, "set preview error: ", ignored);
            }
            camera.setParameters(parameter);

        }  
    }

surfaceChanged()我启动相机预览。

@Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
                               int height)
    {
        // TODO Auto-generated method stub
        if(isPreview == true)
        {
            camera.stopPreview();
            isPreview = false;
        }

        if (camera != null)
        {
            try
            {

                camera.setPreviewDisplay(surfaceHolder);
                camera.setDisplayOrientation(90);
camera.startPreview();
                isPreview = true;
            }
            catch (IOException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

surfaceDestroyed()我发布了相机资源

@Override
   public void surfaceDestroyed(SurfaceHolder holder)
   {
       if (camera != null) {
           camera.stopPreview();

           camera.release();
           camera = null;
           isPreview = false; 
       }

   }

以下是返回预览尺寸的引用方法

private Camera.Size getBestPreviewSize(int width, int height,
                                           Camera.Parameters parameters) {
        Camera.Size result = null;

        for (Camera.Size size : parameters.getSupportedPreviewSizes()) {
            if (size.width <= width && size.height <= height) {
                if (result == null) {
                    result = size;
                } else {
                    int resultArea = result.width * result.height;
                    int newArea = size.width * size.height;

                    if (newArea > resultArea) {
                        result = size;
                    }
                }
            }
        }

        this.size = result;
        return (result);
    }

每当我想使用前置摄像头时 - 前置摄像头是一项附加功能,通常使用后置摄像头 - 我称之为frontCamera()方法。所有这个方法都将camera-id设置为2,我认为这是frontCamera()的标志。然后我用更新的参数设置参数并拍照。

    private void frontCamera() {

        parameter = camera.getParameters();

            cameraId = findFrontFacingCamera();

            if (cameraId < 0) {
//no front face camera

            } else {

                parameter.set("camera-id", 2);
                camera.setParameters(parameter);
            }

            camera.takePicture(null,
                    null, myPictureCallback_JPG);

    }

我对前脸摄像头的检查是通过findFrontFacingCamera()方法

完成的
private int findFrontFacingCamera() {
        cameraId = -1;
        //search for the front facing camera
        int numberOfCameras = Camera.getNumberOfCameras();
        for (int i = 0; i<numberOfCameras; i++) {
            CameraInfo cInfo = new CameraInfo();
            Camera.getCameraInfo(i, cInfo);
            if (cInfo.facing == CameraInfo.CAMERA_FACING_FRONT) {
                Log.d(TAG, "Front Camera found");
                cameraId = i;
                break;
            }
        }
        return cameraId;
    }

最终注释:numberOfCameras返回2,表示我的测试设备有两个摄像头。此外,我正在达到&#34;前置摄像头找到&#34;标签进一步说服我这不是硬件问题。无论出于何种原因,此代码仅使用后置摄像头拍摄图像。有任何想法吗?提前谢谢。

1 个答案:

答案 0 :(得分:2)

请勿使用.open()。使用.open(cameraID)并传递前置摄像头的摄像头ID。