2013-05-05 218 views
0

保存图像我有一个绘制资源到一个库保存的图像与一个按钮,我用这个代码:的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 ... oo

在此先感谢。

+0

当您保存输出文件时,您将如何处理输出文件?您可以使用'Environment.getExternalStorageDirectory()。getPath()'获取设备上外部存储(SDcard)的目录位置。然后,您可以附加您想要创建的用于存储文件的任何目录名称。我喜欢使用应用程序的包名来避免任何冲突。然后你可以使用'File myFile = new File(SDdirectory,“filename”)创建一个'File'句柄;' – HeatfanJohn 2013-05-05 18:15:21

+0

谢谢但SDdirectory给我的问题:( – Gioele 2013-05-05 21:34:36

+0

Fyi,'String SDdirectory = Environment.getExternalStorageDirectory()。getPath )' – HeatfanJohn 2013-05-06 01:12:20

回答

1

我不知道,如果有一个更好的解决方案,但此代码的工作对我来说:

//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(); 

请确保您已在清单中加入这一行.xml:

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

非常感谢,但在tipe fos无法解析变量,我有要做什么? – Gioele 2013-05-05 21:16:58

+0

对不起,我忘记了这一行:“FileOutputStream fos;” - >你也可以在第一次调用fos之前把它:“FileOutputStream fos = new FileOutputStream(f);” – Commander3000 2013-05-06 05:20:05

+0

好吧,现在的问题是:重复变量fos – Gioele 2013-05-06 11:33:36

1

试试这个:

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)不会阻止用户界面:根据需要复制整个数据,你应该考虑重复使用多次较小的缓冲区线。看到这里的例子:http://developer.android.com/reference/android/os/AsyncTask.html

+0

Grazie Ho usato QUESTO codice但我保存一个0kb文件 – Gioele 2013-05-06 11:27:43

0

该文件是您要写入的文件对象。

顺便说一句我会建议去Apache Commons IO做文件操作。

参考 - >this