2010-06-24 5 views
38

Je voudrais écrire une application Android qui couche essentiellement une superposition sur l'image sur une autre image, puis je voudrais enregistrer l'image avec la superposition comme un jpg ou png. Fondamentalement, ce sera l'ensemble de la vue que je voudrais sauver.Android enregistrer la vue en jpg ou png

Un exemple de code serait très utile.

EDIT:

J'ai essayé vos suggestions et je reçois un pointeur NULL à la ligne Starred.

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

Rien à faire? Je sais que c'est possible, je l'ai vu fait dans d'autres applications. – shaneburgess

+0

Pouvez-vous nous donner un code décrivant comment vous faites le montage? –

+0

Son plus d'une idée en ce moment, mais je vais juste avoir une image superposée sur l'image de la photo. À moins qu'il y ait une meilleure façon de le faire. – shaneburgess

Répondre

74

Vous pouvez tirer parti du cache de dessin d'une vue.

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

Où voir est votre vue. Le 95 est la qualité de la compression JPG. Et le flux de sortie du fichier est juste cela.

+0

J'ai essayé votre code, mais où la racine commence-t-elle pour le FileOutputStream? Parce que j'ai essayé de regarder dans les dossiers de l'émulateur et n'a pas pu trouver l'image enregistrée ... – Sephy

+2

Il commence à la racine du téléphone. Donc, si vous voulez charger quelque chose à partir de la carte SD, utilisez Environment.getExternalStorageDirectory() pour obtenir la racine de la carte SD. – Moncader

+0

Donc, un LinerLayout peut-il être la vue dans ce cas et est-ce que cela va prendre quelque chose dans le LinearLayout? – shaneburgess

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

Utilisez la référence fos comme troisième paramètre de la méthode b.compress() dans la réponse de Moncader. L'image sera stockée comme image.jpg dans le répertoire racine de votre carte SD.

Questions connexes