我正在尝试将捕获的.bmp文件保存到SD卡。 这是一段代码片段,负责这个:
String root = Environment.getExternalStorageDirectory().toString();
File mFolder = new File(root + "/mFolder");
if (!mFolder.exists())
{
mFolder.mkdir();
}
String strF = mFolder.getAbsolutePath();
File mSubFolder = new File(strF + "/MyApp-SubFolder");
if (!mSubFolder.exists())
{
mSubFolder.mkdir();
}
String s = "myfile.png";
File f = new File(mSubFolder.getAbsolutePath(),s);
String strMyImagePath = f.getAbsolutePath();
FileOutputStream fos = null;
try
{
fos = new FileOutputStream(f);
bmp.compress(Bitmap.CompressFormat.PNG,70, fos);
fos.flush();
fos.close();
Log.d("asd", "yeah!");
// MediaStore.Images.Media.insertImage(getContentResolver(), b, "Screen", "screen");
}catch (FileNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
但是有一个错误:
图片无效且尺寸为0kb
我做错了什么?
答案 0 :(得分:2)
试试这个
private boolean SaveToSD() {
String imageName = null;
Bitmap sourceBitmap = ((BitmapDrawable) img.getDrawable()).getBitmap();
boolean imageSaved = false;
if (sourceBitmap != null && !sourceBitmap.isRecycled()) {
File storagePath = new File(
Environment.getExternalStorageDirectory() + "/iGridu/");
if (!storagePath.exists()) {
storagePath.mkdirs();
}
int count = storagePath.list().length;
Log.i("SaveToSD count", "" + count);
imageName = String.valueOf(count + 1) + "_igridu";
FileOutputStream out = null;
File imageFile = new File(storagePath, String.format("%s.jpg",
imageName));
try {
out = new FileOutputStream(imageFile);
imageSaved = sourceBitmap.compress(Bitmap.CompressFormat.JPEG,
90, out);
out.flush();
out.close();
} catch (Exception e) {
Log.e("SaveToSD ", "Unable to write the image to gallery" + e);
}
ContentValues values = new ContentValues(3);
values.put(Images.Media.TITLE, imageName);
values.put(Images.Media.MIME_TYPE, "image/jpeg");
values.put("_data", imageFile.getAbsolutePath());
getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values);
}
return imageSaved;
}
答案 1 :(得分:0)
你必须把它放在你的Manifest.xml
中<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />