0

camera.takePicture我正在使用此代码在调用后将图像写入 SD :

protected String doInBackground(byte[]... jpeg) {
    File directory=new File(Environment.getExternalStorageDirectory() + "/" + getString(R.string.qpw_picture_path) + "/" + getString(R.string.qpw_picture_title) + "_" + initialTime);
    directory.mkdirs();
    String currentTime = new SimpleDateFormat(getString(R.string.qpw_date_format)).format(new Date());
    File photo = new File (directory, getString(R.string.qpw_picture_title) + "_" + currentTime + "_" + current + ".jpg");
    current++;

    if (photo.exists()) {
        photo.delete();
    }

    try {
        FileOutputStream fos=new FileOutputStream(photo.getPath());         
        fos.write(jpeg[0]);
        fos.flush();
        fos.close();
    }
    catch (java.io.IOException e) {
    }

    new ImageMediaScanner(getBaseContext(), photo);
    return(null);
}

在这种情况下工作正常,但是当我使用相同的代码从中写入图像时camera.setPreviewCallback,我最终会在 SD 上得到 450KB 损坏的图像,这些图像无法使用甚至打开。

任何帮助或建议将不胜感激。

编辑:

看来数据应该先从YUV转换成RGB再保存。在尝试了在 Google 和 SO 上找到的众多代码示例之一后,我再也没有遇到任何问题。

有谁知道最好的方法是什么?在速度、内存分配、CPU...

4

1 回答 1

0

以防万一有人在同样的问题上偶然发现这篇 SO 帖子很好地总结了我正在寻找的内容。

于 2012-10-01T10:05:25.317 回答