我正在编写一个应用程序,该应用程序使用 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 的图像。