如何在Android中使用一个摄像头创建多个镜头或预览

时间:2013-02-22 07:31:22

标签: android android-layout android-camera

我想创建类似上面的东西,那三个盒子,就像一个相机预览。关于该怎么做的任何想法或概念?

我尝试获取相机的实例并将其放置到三个camerapreview对象,但我收到一条错误消息,我想,这是不允许的。这是我的代码:

  private CameraPreview mPreview;
  private CameraPreview mPreview2;
  private CameraPreview mPreview3;
  private FrameLayout preview;
  private FrameLayout preview2;
  private FrameLayout preview3;

    mCamera=getCameraInstance(); 
    mCamera2=getCameraInstance();
    mCamera3=getCameraInstance();

    mPreview=new CameraPreview(getApplicationContext(), mCamera);
    mPreview2=new CameraPreview(getApplicationContext(), mCamera2);
    mPreview3=new CameraPreview(getApplicationContext(), mCamera3);

    preview=(FrameLayout)findViewById(R.id.camSetA_qr1);
    preview.addView(mPreview);
    preview2=(FrameLayout)findViewById(R.id.camSetA_qr1);
    preview2.addView(mPreview2);
    preview3=(FrameLayout)findViewById(R.id.camSetA_qr1);
    preview3.addView(mPreview3);

和我的getinstance代码

 public static Camera getCameraInstance() {
    Camera c = null;
    try {
        c = Camera.open();
    } catch (Exception e) {
    }
    return c;
 }

1 个答案:

答案 0 :(得分:3)

您只能打开一次给定的相机(正面或背面);您无法多次打开相机以生成多个预览流。事实上,在大多数设备上,由于摄像机处理管道在两台摄像机之间共享,因此无法同时打开前置摄像头和后置摄像头。

要执行此操作,您只需打开相机一次,然后将输出预览数据拆分为随后显示的三个部分。

如果你需要在3.0之前的Android版本(Honeycomb)上运行,那么你需要使用preview callbacks。使用它们,您将获得每帧的YUV数据的byte []数组,然后您可以裁剪,转换为RGB,并放置在ImageView或SurfaceView中。

在Android 3.0或更高版本中,您可以使用setPreviewTexture方法将预览数据传输到OpenGL纹理中,然后可以将其渲染为GLSurfaceView中的多个四边形或等效物。