Camera SetPreviewCallback将YUV转换为RGB的最佳方法

时间:2012-09-30 22:01:03

标签: android android-camera rgb

我在调用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 ......

1 个答案:

答案 0 :(得分:0)

万一有人偶然发现同一问题this SO post总结了我在寻找的东西。