如何在 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 中使用一台相机创建多镜头或预览的主要内容,如果未能解决你的问题,请参考以下文章