Android Camera API を使用して、特定の間隔で自動的に写真を撮るアプリをプログラミングしています。多かれ少なかれ正常に動作していますが、奇妙な問題があります。この画像に見られるように、すべての画像の約 2/3 がわずかに破損しています。
.
特に、これは約 5500 KB を超えるイメージでのみ発生します (破損していない最大のイメージは 5419 KB、破損した最小のイメージは 5510 KB です)。
onPictureTaken の実装で画像を保存するためのコードは次のとおりです。
@Override
public void onPictureTaken(byte[] data, Camera camera) {
Log.d(TAG, "onPictureTaken");
File pictureFileDir = getDir();
if (!pictureFileDir.exists() && !pictureFileDir.mkdirs()) {
Log.d(TAG,"Can't create directory to save image.");
return;
}
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
String date = dateFormat.format(new Date());
final String photoFile = date + ".jpg";
final String filename = pictureFileDir.getPath() + File.separator + photoFile;
final File pictureFile = new File(filename);
try {
BufferedOutputStream buf = new BufferedOutputStream(new FileOutputStream(pictureFile));
buf.write(data);
buf.flush();
buf.close();
} catch (Exception error) {
Log.d(getClass().getCanonicalName(), "File" + filename
+ "not saved: " + error.getMessage());
}
}
編集:この問題を解決しました。プレビュー テクスチャが表示されていない画像を取得した場合でも、Camera.Parameters でプレビュー サイズを割り当てる必要があることがわかりました。このプレビュー サイズを実際の画像サイズに設定すると、5500 kB を超えるサイズの画像が正しく取得されます。