1

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

4

0 回答 0