2010-02-01 21 views
23

Estoy dibujando imágenes en 2D en el lienzo.Imagen sobre lienzo en archivo JPEG

Quiero guardar la imagen que se muestra en el lienzo en un archivo JPEG, ¿cómo puedo hacerlo?

+0

Desde el enlace que se hace referencia es desde hace mucho tiempo muertos podría quizás añadir un poco más de contexto en la propia pregunta? – Flexo

Respuesta

23
  1. crear un mapa de bits vacío
  2. crear un nuevo objeto de la lona y pasar este mapa de bits para que
  3. view.draw llamada (lienzo) pasándole el objeto canvas que acaba de crear. Refer Documentation of method for details.
  4. Utilice Bitmap.compress() para escribir el contenido del mapa de bits en un OutputStream, archivo tal vez.

Pseudo código:

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

Hola Samuh, Probé el código, genera un archivo jpeg pero no tiene la forma del lienzo dibujado o lo que he escrito en el lienzo. Cualquier comentario. Gracias, Ketan –

+0

Gracias por la respuesta. –

12
  1. establecer caché Dibujo Habilitado
  2. dibujar lo que desee
  3. obtener el objeto de mapa de bits de la vista
  4. Comprimir y guardar el archivo de imagen

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

De alguna manera, parece una mala idea comprimir y guardar dentro del método onDraw. –

+0

me da una excepción de puntero nulo – abh22ishek

6

lienzo a 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(); 
     } 
    } 
}