如何在 Android 中使用一台相机创建多镜头或预览

Posted

技术标签:

【中文标题】如何在 Android 中使用一台相机创建多镜头或预览【英文标题】:How to create multi lenses or preview using one camera in Android 【发布时间】:2013-02-07 18:24:51 【问题描述】:

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

我尝试获取相机实例并将其放置到三个 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;
 

【问题讨论】:

也许您可以将图像放在相机屏幕上方,用三个透明方块? 是的,我也想过这个,但除此之外还有其他选择吗? 我会推荐这个选项,因为它会节省宝贵的内存。也许也可以将相机输出存储在缓冲区中,然后每帧代表每个方形图像?我仍然不知道其他可能性,因为我是 iPhone 用户。 我明白了,谢谢你的想法,非常感谢,我会试试你的方法。 :D 【参考方案1】:

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

为此,您只需打开相机一次,然后将输出预览数据拆分为三个部分,然后再显示。

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

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

【讨论】:

以上是关于如何在 Android 中使用一台相机创建多镜头或预览的主要内容,如果未能解决你的问题,请参考以下文章

使用 SurfaceView 的 Android 游戏循环;快速更改相机“镜头”会导致黑色闪光等

相机镜头参数怎么看

一个树莓派4b可以接多少个ip摄像头

新型无镜头相机助力计算机视觉

工业相机镜头选型

工业相机镜头选型