我想创建类似上面的东西,那三个盒子,就像一个相机预览。关于该怎么做的任何想法或概念?
我尝试获取相机的实例并将其放置到三个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;
}
答案 0 :(得分:3)
您只能打开一次给定的相机(正面或背面);您无法多次打开相机以生成多个预览流。事实上,在大多数设备上,由于摄像机处理管道在两台摄像机之间共享,因此无法同时打开前置摄像头和后置摄像头。
要执行此操作,您只需打开相机一次,然后将输出预览数据拆分为随后显示的三个部分。
如果你需要在3.0之前的Android版本(Honeycomb)上运行,那么你需要使用preview callbacks。使用它们,您将获得每帧的YUV数据的byte []数组,然后您可以裁剪,转换为RGB,并放置在ImageView或SurfaceView中。
在Android 3.0或更高版本中,您可以使用setPreviewTexture方法将预览数据传输到OpenGL纹理中,然后可以将其渲染为GLSurfaceView中的多个四边形或等效物。