カメラのプレビューフレームをキャプチャしてAndroidでビットマップに変換するアプリを書いています。これが私のコードです:
Camera.PreviewCallback previewCallback = new Camera.PreviewCallback()
{
public void onPreviewFrame(byte[] data, Camera camera)
{
try
{
BitmapFactory.Options opts = new BitmapFactory.Options();
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);//,opts);
}
catch(Exception e)
{
}
}
};
mCamera = Camera.open();
mCamera.setPreviewCallback(previewCallback);
プレビューを開始した後、コールバックがデータで呼び出されましたが、ビットマップがnullです。
バイト配列をビットマップに変換するときに何を間違えましたか?
onPreviewFrame()
関数では、最初に画像形式を確認する必要があります。
これはNV21の例です。
public void onPreviewFrame(byte[] data, Camera camera)
{
Parameters parameters = camera.getParameters();
imageFormat = parameters.getPreviewFormat();
if (imageFormat == ImageFormat.NV21)
{
Rect rect = new Rect(0, 0, PreviewSizeWidth, PreviewSizeHeight);
YuvImage img = new YuvImage(data, ImageFormat.NV21, PreviewSizeWidth, PreviewSizeHeight, null);
OutputStream outStream = null;
File file = new File(NowPictureFileName);
try
{
outStream = new FileOutputStream(file);
img.compressToJpeg(rect, 100, outStream);
outStream.flush();
outStream.close();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
写真を撮る別の方法については、この記事をチェックしてください: Androidでカメラを使用する方法
BitmapFactoryを使用する前に、プレビューフレームデータをRGBにデコードしてみましたか?デフォルトのフォーマットはYUVですが、BitmapFactoryと互換性があるかどうかはわかりません。 Dave Manpearlのデコード方法はここにあります:
動作するかどうか教えてください。
乾杯、
ポール