2013-05-05 58 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