android,将视图保存为png文件

时间:2013-12-30 11:01:27

标签: android bitmap

我期待下面的代码将图像保存到我的本地SD卡但是当我运行应用程序并触发saveCanvasImage()方法时,它没有这样做。当我查看LogCat时,我可以找到一个System.err条目。文字说:

  

java.io.FileNotFoundException:/mnt/sdcard/drawPic1.png:open failed:EACCES(权限被拒绝)

我认为这会创建一个新的png文件并将其保存在目录中。我显然错了。我可以在这里做些什么才能让它发挥作用?

public void saveCanvasImage() {

    Log.d("bitmap","strm");
    tv.setDrawingCacheEnabled(true);
    Bitmap bm = tv.getDrawingCache();

    File fPath = Environment.getExternalStorageDirectory();
    File f = null;
    f = new File(fPath, "drawPic1.png");

    try {
    FileOutputStream strm = new FileOutputStream(f);
    bm.compress(CompressFormat.PNG, 80, strm);
    strm.close();
    }
    catch (IOException e){
        e.printStackTrace();
    }

}

5 个答案:

答案 0 :(得分:7)

你有权限吗?

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

答案 1 :(得分:1)

您确定已添加此权限以写入外部存储空间

android.permission.WRITE_EXTERNAL_STORAGE

答案 2 :(得分:0)

在项目的清单文件权限

中添加以下权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

答案 3 :(得分:0)

我想你忘了创建一个新文件!
改为使用它并在manifest中设置权限:

public void saveCanvasImage(Bitmap b) {

     File f = new File(Environment.getExternalStorageDirectory().toString() + "/img.png");

     f.createNewFile();  // your mistake was at here      

     try {

     FileOutputStream fos = new FileOutputStream(f);

     b.compress(CompressFormat.PNG, 100, fos);

     fos.flush();

     fos.close();

     }catch (IOException e){

         e.printStackTrace();
     }

}

和许可:

  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

答案 4 :(得分:0)

您可以使用此代码

Bitmap bbicon;

bbicon=BitmapFactory.decodeResource(getResources(),R.drawable.bannerd10);
//ByteArrayOutputStream baosicon = new ByteArrayOutputStream();
//bbicon.compress(Bitmap.CompressFormat.PNG,0, baosicon);
//bicon=baosicon.toByteArray();

String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
OutputStream outStream = null;
File file = new File(extStorageDirectory, "er.PNG");
try {
    outStream = new FileOutputStream(file);
    bbicon.compress(Bitmap.CompressFormat.PNG, 100, outStream);
    outStream.flush();
    outStream.close();
} catch(Exception e) {

}

以及权限。