Lona de Android a mapa de bits
He estado buscando en línea cómo convertir lo que está en un lienzo en un mapa de bits. He intentado varias maneras de hacer esto, como guardar la caché de dibujo a un mapa de bits, pero el resultado final es el mapa de bits de fondo parpadeando por un momento, a continuación, convertir en una pantalla en negro. La imagen de prueba se muestra sobre el fondo, pero no se superpone por el fondo de la próxima llamada de OnDraw
.
MainThreading{ ... if(notuptodate == true){ //call readyBackground to create the background bitmap this.mainPanel.readyBackground(canvas); //post the canvas surfaceHolder.unlockCanvasAndPost(canvas); //clean the Canvas canvas = null; //ready new Canvas canvas = this.surfaceHolder.lockCanvas();//lock the canvas to enable editing }//if not true if (MainThreading.notuptodate == false){ mainPanel.onDraw(canvas); }//if false ... }//mainthreading //this method is run first to create the Bitmap that on draw will use public void readyBackGround(Canvas canvas){ if (MainThreading.notuptodate){ //method used to draw multiple Bitmaps onto the canvas renderBackground(canvas); //private Bitmap, this is the supposed proper size of the bitmap backgroundBitmap=Bitmap.createBitmap(240, 320, Config.ARGB_8888); //set the canvas to turn whats on its self onto the bitmap. canvas.setBitmap(backgroundBitmap); //set boolean flag to false so renderBackground won't be called //untill it needs to be updated again MainThreading.notUpToDate = false; } //this method is called when notUpToDate = true @Override protected void onDraw(Canvas canvas){ if (this.threado.getBackground() != null){ canvas.drawBitmap(backgroundBitmap, 0, 0, null); } //this if statement is never activated if (this.threado.getBackground() == null){ Log.d("background nonexistant", "Importante!"); } //draw test object onto background test.DrawObject(canvas); //when MainThreading.notUpToDate = true isn't commented out, the //screen consistantly shows the background, but the test object isn't //drawn //MainThreading.notUpToDate = true; }
- Android, Guardar y cargar un mapa de bits en caché de diferentes actividades
- mapa de bits de Android a matriz de bytes sin compresión
- Guardar bitmap en tarjeta SD sin comprimirla en android
- Lista de contactos con contacto La foto crea problemas de rendimiento
- BitmapFactory.Options.inBitmap causa desgarro al cambiar mapa de imagen de ImageView a menudo
- Convertir android.media.Image (YUV_420_888) en mapa de bits
- Centro de recorte de Android de mapa de bits
- Cómo convertir todo el contenido en una vista de desplazamiento a un mapa de bits?
- ¿Dónde desasignar correctamente el mapa de bits en Android View?
- ¿Cómo agrego el relleno a un mapa de bits y un color en una lista de capas
- Aplicación de una superposición (filtro de imagen) a un mapa de bits
- ¿Cómo puedo reconocer qué área de una imagen (no sólo las coordenadas) se ha tocado en Android?
- Qué tamaño almacenar imagen en el servidor para utilizar con la aplicación de Android
Pruébalo de esta manera …
– Crear un bitmap
de bitmap
del tamaño correcto utilizando Bitmap.createBitmap()
– Crear una canvas instance
que señale que este mapa de bits utilizando el constructor Canvas(Bitmap)
– Dibuja el canvas
– Utilice el bitmap
public class CanvasToBitmap extends View { Paint paint = new Paint(); Rect mRect = new Rect(); Bitmap bitmap = Bitmap.createBitmap(200, 200, Bitmap.Config.ARGB_8888); public myCanvas( Context context ) { super(context); Canvas canvas = new Canvas(bitmap); draw(canvas); } @Override public void onDraw(Canvas canvas) { mRect.set(0, 0, 200, 200); paint.setColor(Color.GREEN); paint.setStyle(Paint.Style.FILL); canvas.drawRect(mRect, paint); canvas.setBitmap(bitmap); ByteArrayOutputStream mByteArrayOutputStream = new ByteArrayOutputStream(); try{ bitmap.compress(Bitmap.CompressFormat.PNG, 100, mByteArrayOutputStream); bitmap = BitmapFactory.decodeStream(new ByteArrayInputStream(mByteArrayOutputStream.toByteArray())); mByteArrayOutputStream.flush(); mByteArrayOutputStream.close(); } catch (Exception e) {e.printStackTrace();} } }
Crear una nueva instancia:
CanvasToBitmap canvasToBitmap = new CanvasToBitmap(getBaseContext());
Obtener bitmap de canvasToBitmap:
Bitmap bitmap = canvasToBitmap.bitmap;