8

上記のようなものを作成したかったのですが、その 3 つのボックスはカメラのプレビューのようになります。何をすべきかについてのアイデアやコンセプトはありますか?

カメラのインスタンスを取得して 3 つの 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;
 }
4

1 に答える 1

3

特定のカメラ (前面または背面) は 1 回しか開くことができません。カメラを複数回開いて、複数のプレビュー ストリームを生成することはできません。実際、ほとんどのデバイスでは、カメラ処理パイプラインが 2 つのカメラ間で共有されているため、前面カメラと背面カメラを同時に開くことはできません。

これを行うには、カメラを 1 回開くだけで、出力プレビュー データを 3 つの部分に分割して表示するだけです。

3.0 (Honeycomb) より前の Android バージョンで実行する必要がある場合は、プレビュー コールバックを使用する必要があります。それらを使用すると、各フレームの YUV データの byte[] 配列を取得し、それをトリミングして RGB に変換し、ImageView または SurfaceView に配置できます。

Android 3.0 以降では、setPreviewTextureメソッドを使用してプレビュー データを OpenGL テクスチャにパイプできます。これにより、GLSurfaceView または同等の複数のクワッドにレンダリングできます。

于 2013-02-24T10:31:00.983 に答える