2010-11-11 25 views
8

Estoy tratando de averiguar cómo dibujar en un mapa de bits en Android, y mantener una copia de estos mapas de bits modificados para una función de deshacer.¿Cómo dibujar en Bitmap en Android?

Bitmap b = ... 
Paint p = new Paint(); 
canvas.drawBitmap(b, new Matrix(), null); 
canvas.drawCircle(0,0,20,20); 
//does Bitmap b have the circle drawn on it next time? 

O ¿cómo puedo obtener el mapa de bits después de su sido elaborado con la tela (Quiero preservar una pila de mapas de bits con los cambios aplicados por el dibujo tela)? Tal vez estoy haciendo esto completamente mal.

Respuesta

17

Utilice new Canvas(Bitmap bitmap) para proporcionar Canvas con Bitmap que contendrá el resultado de sus operaciones de dibujo.

El original Bitmap que dibuje en su Canvas con nunca será modificado.

Después de cada operación realizada por el usuario que puede:

  • mantener en memoria una lista de las operaciones de hecho
  • guardar los resultados intermedios a almacenamiento externo con Bitmap.compress

Otro enfoque podría ser utilizar un LayerDrawable para apilar sucesivas operaciones de dibujo una encima de la otra. Puedes imaginarte permitiendo al usuario deshabilitar cada operación individual realizada.

+1

En este momento estábamos dibujando un grupo de círculos basados ​​en el evento táctil del usuario, pero a medida que se dibujan más círculos y se mantienen en la memoria, se ralentiza considerablemente. Es por eso que buscábamos "Guardar" las entradas/acciones de los usuarios mediante la aplicación de los cambios a un mapa de bits, de ese modo solo se dibuja un mapa de bits cada vez en lugar de guardar y dibujar miles de círculos. –

+0

Para que pueda usar Bitmap.copy (...) en su mapa de bits de destino y proporcionar el lienzo con el mapa de bits resultante como el nuevo destino de dibujo con Canvas.setBitmap() –