カメラ ビューを実行している surfaceView から画像を取得しようとしています。
私はすでに onPreviewFrame を実装しており、デバッグが示すように正しく呼び出されています。
私が今直面している問題は、メソッドで受け取った byte[] データが YUV 空間色 (NV21) であるためです。それをグレースケールに変換してビットマップを生成し、それをファイルに保存しようとしています。 .
私が従っている変換プロセスは次のとおりです。
public Bitmap convertYuvGrayScaleRGB(byte[] yuv, int width, int height) {
int[] pixels = new int[width * height];
for (int i = 0; i < height*width; i++) {
int grey = yuv[i] & 0xff;
pixels[i] = 0xFF000000 | (grey * 0x00010101);
}
return Bitmap.createBitmap(pixels, width, height, Bitmap.Config.ARGB_8888);
}
ファイルに保存するためのインポート手順は次のとおりです。
Bitmap bitmap = convertYuvGrayScaleRGB(data,widht,heigth);
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 50, bytes);
File f = new File(Environment.getExternalStorageDirectory()
+ File.separator + "test.jpg");
Log.d("Camera", "File: " + f.getAbsolutePath());
try {
f.createNewFile();
FileOutputStream fo = new FileOutputStream(f);
fo.write(bytes.toByteArray());
fo.close();
bitmap.recycle();
bitmap = null;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
とはいえ、私が得た結果は次のとおりです。