カメラ プレビューからビットマップ イメージを取得しようとしています。顔検出を実行した後、いくつかの処理を行い、いくつかのオーバーレイを描画します。
周りを見回した後、 onPreviewFrame が取るバイト配列はビットマップに直接デコードできないことがわかりました。YuvImage を使用して正しいピクセル形式に変換する必要があり、それがまさに私がしたことです:
@Override
public void onPreviewFrame(byte[] data, Camera camera)
{
YuvImage temp = new YuvImage(data, camera.getParameters().getPreviewFormat(), camera.getParameters().getPictureSize().width, camera.getParameters().getPictureSize().height, null);
ByteArrayOutputStream os = new ByteArrayOutputStream();
temp.compressToJpeg(new Rect(0, 0, temp.getWidth(), temp.getHeight()), 80, os);
Bitmap preview = BitmapFactory.decodeByteArray(os.toByteArray(), 0, os.toByteArray().length);
/* DO SOMETHING WITH THE preview */
}
問題は、「プレビュー」オブジェクトが null ではなく、明らかに有効なビットマップではないことです。デバッガーでは、mWidth と mHeight の両方が -1 に設定されていることがわかりますが、これは間違っているようです。私は何を間違っていますか?