Java 图像的图像损坏>;使用Android摄像头API时为5500 kB

Java 图像的图像损坏>;使用Android摄像头API时为5500 kB,java,android,android-camera,Java,Android,Android Camera,我正在编写一个应用程序,使用Android Camera API以一定的间隔自动拍照。它的工作或多或少很好,但我有一个奇怪的问题:我所有的图像中大约有2/3是轻微损坏的,这可以从这张图像中看出 值得注意的是,这仅适用于大于约5500 KB的图像(最大的未损坏图像为5419 KB,最小的损坏图像为5510 KB) 有人知道是什么导致了这样的腐败吗 以下是我在onPictureTaken实现中保存图像的代码: @Override public void onPictureTaken(byte[]

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

这些图像是否只是轻微损坏,或者其中一些图像几乎完全呈灰色?保存事件的一些代码会很好。似乎写入或读取数据出错。我将我的原始帖子编辑为包含源代码。始终只有图像的下三分之一受到影响