処理のために、カメラの画像を yuv(NV21) 形式 (SD カードまたはバッファー) で直接保存する方法を知りたいです。jpeg形式で保存することはできますが、NV21に変換すると遅くなると思います。私のアプリケーションでは、撮影した写真をユーザーに見せる必要はありません。これは、写真をjpegとして保存する部分です。明らかに、ここで何かが欠けています。
ShutterCallback shutterCallback = new ShutterCallback() {
public void onShutter() {
Log.d(TAG, "onShutter'd");
}
};
/** Handles data for raw picture */
PictureCallback rawCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
Log.d(TAG, "onPictureTaken - raw");
}
};
/** Handles data for jpeg picture */
PictureCallback jpegCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
FileOutputStream outStream = null;
try {
//create the directory
String state = Environment.getExternalStorageDirectory().getPath()+"/CamOverlay";
File folder = new File(state);
boolean success = true;
if (!folder.exists()) {
success = folder.mkdirs();
}
if(!success)
Log.d(TAG,"directory creation failed");
// Or write to sdcard
String name=String.format("/%d.", System.currentTimeMillis());
outStream = new FileOutputStream(state+name+"jpg");
outStream.write(data);
outStream.close();
Log.d(TAG, "onPictureTaken - wrote bytes: " + data.length);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
}
Log.d(TAG, "onPictureTaken - jpeg");
safeToTakePicture=true;
preview.camera.startPreview();
}
};
}
そしてこちらがカメラ設定。
myParameters.setPictureFormat(ImageFormat.YV12);
これを以下に設定してもうまくいきませんでした
myParameters.setPictureFormat(ImageFormat.NV21);
私はアンドロイドが初めてです。このコードは、インターネット上のいくつかの例を使用して作成されています。間違いがありましたらご指摘ください。よろしくお願いします。