2010-02-01 5 views
23

Je dessine des images 2D sur la toile.Image sur toile au format JPEG

Je veux enregistrer l'image affichée sur le canevas en fichier JPEG, comment puis-je le faire?

+0

Depuis le lien dont vous avez parlé est mort depuis longtemps, vous pourriez peut-être ajouter un peu plus de contexte dans la question elle-même? – Flexo

Répondre

23
  1. créer un bitmap vide
  2. créer un nouvel objet de toile et passer ce bitmap à lui
  3. appel view.draw (Canvas) faisant passer l'objet de toile que vous venez de créer. Refer Documentation of method for details.
  4. Utilisez Bitmap.compress() pour écrire le contenu de l'image bitmap dans un OutputStream, fichier peut-être.

Code Pseudo:

Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888); 
Canvas canvas = new Canvas(bitmap); 
view.draw(canvas); 
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); 
+11

Bonjour Samuh, J'ai essayé le code, il génère un fichier jpeg mais n'a pas la forme dessinée sur toile ou ce que j'ai jamais écrit sur toile. Un commentaire. Merci, Ketan –

+0

Merci pour la réponse. –

12
  1. jeu de dessins Cache activé
  2. dessiner ce que vous voulez
  3. Obtenez objet Bitmap de la vue
  4. Compress et enregistrez le fichier d'image

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

import android.app.Activity; 
import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 

public class CanvasTest extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     Draw2d d = new Draw2d(this); 
     setContentView(d); 
    } 

    public class Draw2d extends View { 

     public Draw2d(Context context) { 
      super(context); 
      setDrawingCacheEnabled(true); 
     } 

     @Override 
     protected void onDraw(Canvas c) { 
      Paint paint = new Paint(); 
      paint.setColor(Color.RED);   
      c.drawCircle(50, 50, 30, paint); 

      try { 
       getDrawingCache().compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream(new File("/mnt/sdcard/arun.jpg"))); 
      } catch (Exception e) { 
       Log.e("Error--------->", e.toString()); 
      } 
      super.onDraw(c); 
     } 

    } 

}
+7

D'une manière ou d'une autre, c'est une mauvaise idée de compresser et d'enregistrer dans la méthode onDraw. –

+0

il me donne une exception de pointeur nul – abh22ishek

6

Toile en JPG:

Canvas canvas = null; 
FileOutputStream fos = null; 
Bitmap bmpBase = null; 

bmpBase = Bitmap.createBitmap(image_width, image_height, Bitmap.Config.ARGB_8888); 
canvas = new Canvas(bmpBase); 
// draw what ever you want canvas.draw... 

// Save Bitmap to File 
try 
{ 
    fos = new FileOutputStream(your_path); 
    bmpBase.compress(Bitmap.CompressFormat.PNG, 100, fos); 

    fos.flush(); 
    fos.close(); 
    fos = null; 
} 
catch (IOException e) 
{ 
    e.printStackTrace(); 
} 
finally 
{ 
    if (fos != null) 
    { 
     try 
     { 
      fos.close(); 
      fos = null; 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 
Questions connexes