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...