Cameraプレビュー画像を取得する|Android開発
以前書いた記事とは違うandroid.hardware.Camera
でのプレビュー画像取得方法です。
こちらの方がよく使うパターンですね。
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);