2010-06-24 131 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卡的根目录中。

相关问题