2010-06-24 12 views
38

Me gustaría escribir una aplicación de Android que básicamente capas una superposición en la imagen en otra imagen y luego me gustaría guardar la imagen con la superposición como un jpg o png. Básicamente, esta será toda la vista que me gustaría guardar.Android save view to jpg or png

El código de muestra sería muy útil.

EDIT:

probé sus sugerencias y estoy recibiendo un puntero nulo en la línea de estrellado.

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

Nada en esto? Sé que es posible, lo he visto hecho en otras aplicaciones. – shaneburgess

+0

¿Puede darnos algún código que describa cómo está editando? –

+0

Es más una idea en este momento, pero solo tendré una imagen superpuesta sobre la imagen de la foto. A menos que haya una mejor manera de hacerlo. – shaneburgess

Respuesta

74

Puede aprovechar el caché de dibujo de una Vista.

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

Where view is your View. El 95 es la calidad de la compresión JPG. Y la secuencia de salida del archivo es solo eso.

+0

Probé tu código, pero ¿dónde comienza la raíz para FileOutputStream? porque traté de buscar en las carpetas del emulador y no pude encontrar la imagen guardada ... – Sephy

+2

Empieza en la raíz del teléfono. Por lo tanto, si desea cargar algo desde la tarjeta SD, use Environment.getExternalStorageDirectory() para obtener la raíz de la tarjeta sd. – Moncader

+0

Entonces, ¿puede un LinerLayout ser la vista en este caso y obtendrá algo en LinearLayout? – shaneburgess

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

Utilice la referencia de fos como tercer parámetro del método b.compress() en la respuesta de Moncader. La imagen se almacenará como image.jpg en el directorio raíz de su tarjeta sd.