Как создать несколько объективов или превью с помощью одной камеры в Android

Я хотел создать что-то вроде выше, что три коробки будут похожи на предварительный просмотр камеры. Любая идея или концепция о том, что делать?

Я попытался получить экземпляр камеры и поместить его в три объекта camera preview, но я получаю сообщение об ошибке, я думаю, это не разрешено. вот мой код:

  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);

и мой код получения

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

1 ответ

Вы можете открыть данную камеру (спереди или сзади) только один раз; Вы не можете открыть камеру несколько раз, чтобы создать несколько потоков предварительного просмотра. На самом деле, на большинстве устройств нельзя одновременно открывать переднюю и заднюю камеры, поскольку конвейер обработки камеры совместно используется двумя камерами.

Для этого нужно только один раз открыть камеру, а затем разделить выходные данные предварительного просмотра на три части, которые вы затем отобразите.

Если вам нужно запустить на Android версии до 3.0 (Honeycomb), то вам нужно использовать обратные вызовы предварительного просмотра. С их помощью вы получите массив байтов [] данных YUV для каждого кадра, который затем можно обрезать, преобразовать в RGB и поместить в ImageView или SurfaceView.

В Android 3.0 или более поздней версии вы можете использовать метод setPreviewTexture, чтобы передать данные предварительного просмотра в текстуру OpenGL, которую затем можно отобразить в несколько четырехугольников в GLSurfaceView или аналогичных.

Другие вопросы по тегам