Eclipse:从可绘制资源中保存图像



我必须将图像保存到带有按钮的可绘制资源的图库中,我使用了以下代码:

@Override
           public void onClick(View arg0) {
            // TODO Auto-generated method stub

            Bitmap bitmap=BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher3);
            //generate file
            String SDdirectory = Environment.getExternalStorageDirectory().getPath();
             File externalStorageDir = Environment.getExternalStorageDirectory();
             File f = new File(externalStorageDir, "Bitmapname.png");
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            bitmap.compress(CompressFormat.PNG,0 , bos);
            byte[] bitmapdata = bos.toByteArray();
            try {
                OutputStream os = new FileOutputStream (new File ("storage/sdcard0/iob"));
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

现在的问题是我保存了一个0kb的文件…有限责任

我不知道,如果有更好的解决方案,但这段代码适用于我:

//at first I've imported the bitmap normally.
Bitmap bitmap=BitmapFactory.decodeResource(getResources(),R.drawable.wall);
//generate file
File dir = new File ("/sdcard/foldername/");
File f = new File(dir, String.format("mybitmapname.png"));
//then write it to galery by adding this lines
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.PNG, 0 , bos);
byte[] bitmapdata = bos.toByteArray();
FileOutputStream fos = new FileOutputStream(f);
fos.write(bitmapdata);  
fos.flush();
fos.close();
bos.close();

请确保您已在manifest.xml中添加了这一行:

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

试试这个:

OutputStream os = new FileOutputStream(new File("path/to/file"));
然而,

小心。如果资源很大,那么在流之间复制数据的方式很容易导致堆溢出。您应该考虑使用更小的缓冲区,以便根据需要重复使用多次以复制整个数据:

byte[] data = new byte[1024];
int len = 0;
while ((len = is.read(data)) > -1) {
    os.write(data, 0, len);
}

另一个考虑是将整个复制操作移动到一个单独的线程(例如使用AsyncTask),以避免阻塞UI线程。示例如下:http://developer.android.com/reference/android/os/AsyncTask.html

文件是要写入的file对象。

顺便说一句,我建议使用Apache Commons IO来做文件操作。

reference -> this

最新更新