2010-06-24 106 views
38

我想寫一個Android應用程序,基本上在另一個圖像上的圖像疊加層,然後我想保存帶有疊加層的圖片作爲JPG或PNG。基本上這將是我想要拯救的整個觀點。Android的保存視圖爲JPG或PNG

示例代碼將非常有幫助。

編輯:

我嘗試了你的建議和我在已加星標線得到一個空指針。

import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 

import android.app.Activity; 
import android.graphics.Bitmap; 
import android.graphics.Bitmap.CompressFormat; 
import android.os.Bundle; 
import android.os.Environment; 
import android.widget.LinearLayout; 
import android.widget.TextView; 

    public class EditPhoto extends Activity { 
     /** Called when the activity is first created. */ 
    LinearLayout ll = null; 
    TextView tv = null; 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 
      tv = (TextView) findViewById(R.id.text); 
      ll = (LinearLayout) findViewById(R.id.layout); 
      ll.setDrawingCacheEnabled(true); 
      Bitmap b = ll.getDrawingCache(); 
      File sdCard = Environment.getExternalStorageDirectory(); 
      File file = new File(sdCard, "image.jpg"); 
      FileOutputStream fos; 
     try { 
     fos = new FileOutputStream(file); 
     *** b.compress(CompressFormat.JPEG, 95,fos); 
     } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     } 

     } 
    } 
+0

沒有關於此?我知道這是可能的,我已經看到它在其他應用程序中完成。 – shaneburgess 2010-06-25 04:41:49

+0

你能給我們介紹一下如何進行編輯的代碼嗎? – 2010-08-19 20:36:31

+0

它現在更多的是一個想法,但我只是將圖像視圖覆蓋在照片圖像視圖上。除非有更好的方法去做。 – shaneburgess 2010-08-19 20:38:21

回答

74

你可以坐觀的繪圖緩存的優勢。

view.setDrawingCacheEnabled(true); 
Bitmap b = view.getDrawingCache(); 
b.compress(CompressFormat.JPEG, 95, new FileOutputStream("/some/location/image.jpg")); 

其中視圖是您的視圖。 95是JPG壓縮的質量。文件輸出流就是這樣。

+0

我試過你的代碼,但是FileOutputStream的根在哪裏啓動?因爲我試圖在模擬器的文件夾中查找,並找不到保存的圖像... – Sephy 2010-08-21 12:21:28

+2

它始於電話根。所以,如果你想從SD卡加載某些東西,請使用Environment.getExternalStorageDirectory()來獲取SD卡的根目錄。 – Moncader 2010-08-21 15:38:22

+0

因此,在這種情況下,LinerLayout可以作爲視圖,並將抓住LinearLayout中的任何東西嗎? – shaneburgess 2010-08-23 21:16:01

6
File sdCard = Environment.getExternalStorageDirectory(); 
File file = new File(sdCard, "image.jpg"); 
FileOutputStream fos = new FileOutputStream(file); 

在Moncader的答案中使用fos引用作爲b.compress()方法的第三個參數。該圖像將作爲image.jpg存儲在SD卡的根目錄中。

相關問題