Cameraプレビュー画像を取得する|Android開発

      2018/10/26

以前書いた記事とは違うandroid.hardware.Cameraでのプレビュー画像取得方法です。
こちらの方がよく使うパターンですね。

メンバ変数

byte[] mCallbackBuffer;
Camera mCamera;

プレビューバッファの指定

ここが前回と異なる部分です。
あらかじめアプリ側で用意したバッファにプレビュー画像を出力します。
前回はsetPreviewCallbackでしたがsetPreviewCallbackWithBufferをコールします。

Camera.Parameters params = mCamera.getParameters();
params.setPreviewFormat(ImageFormat.NV21);
params.setPreviewSize(1920, 1080);
mCallbackBuffer = new byte[1920 * 1080 * ImageFormat.getBitsPerPixel(params.getPreviewFormat()) / 8];
mCamera.addCallbackBuffer(mCallbackBuffer);
mCamera.setPreviewCallbackWithBuffer(mPreviewCallback);

上記以外を設置後、startPreviewでプレビューを開始します。

ここではプレビューサイズを固定(1920 x 1080)にしていますが、実際はプレビューで指定可能なサイズを使います。

プレビューコールバック

プレビューコールバック関数でプレビューデータを処理後、再度addCallbackBufferをコールすることで続けてデータが通知されます。

private final Camera.PreviewCallback mPreviewCallback = new Camera.PreviewCallback() {
    @Override
    public void onPreviewFrame(byte[] data, Camera camera) {
        // 再指定
        mCamera.addCallbackBuffer(mCallbackBuffer);
    }
};

プレビュー終了

mCamera.setPreviewCallbackWithBuffer(null);

 - Android