Androidドキュメントが言ったように:
YV12 以外の形式の場合、バッファーのサイズは、プレビュー イメージの幅、高さ、およびピクセルあたりのバイト数を乗算することによって決定されます。幅と高さは getPreviewSize() から読み取ることができます。getBitsPerPixel(int) / 8
ピクセルあたりのバイト数は、getPreviewFormat() の画像形式を使用してから計算できます。
しかし、ほとんどのオンライン コードbitsperpixel
では、byteperpixel=bitsperpixel/8
.
画像の正確なサイズ (バイト単位) を使用して次のコードを使用すると、エラーが発生します: E/Camera-JNI(3656): Callback buffer was too small! 1336320 バイトを期待していましたが、890880 バイトになりました! 何故ですか?バッファを画像サイズの 8 倍にする必要があるのはなぜですか?
Camera.Parameters parameters=mCamera.getParameters();
parameters.setPreviewSize(width,height);
mCamera.setParameters(parameters);
int previewFormat=parameters.getPreviewFormat();
int bitsperpixel=ImageFormat.getBitsPerPixel(previewFormat);
int byteperpixel=bitsperpixel/8;
Camera.Size camerasize=parameters.getPreviewSize();
int frame_bytesize=((camerasize.width*camerasize.height)*byteperpixel);
//create buffer
byte[]frameBuffer=new byte[frame_bytesize];
//buffer registry
mCamera.addCallbackBuffer(frameBuffer);