Android Paint PorterDuff.Mode.CLEAR

Estoy trabajando en la aplicación que está dibujando en lienzo similar a la demo de Finger Paint de Android SDK. Mi problema es cuando estoy usando PorterDuff.Mode.CLEAR . Cuando dibujo y Canvas y si trato de borrar algo, funciona bien. Pero si intento guardar mi imagen como archivo PNG los trazos de borrador están de color negro, y no estoy seguro de por qué está sucediendo esto. He aquí un ejemplo de lo que estoy haciendo:

 @Override protected void onDraw(Canvas canvas) { canvas.drawColor(Color.WHITE); canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint); canvas.drawPath(mPath, mPaint); } 

Borrador :

 case ERASE_MENU_ID: mPaint.setXfermode(new PorterDuffXfermode( PorterDuff.Mode.CLEAR)); return true; 

Y cómo guardo la imagen:

  Calendar currentDate = Calendar.getInstance(); SimpleDateFormat formatter= new SimpleDateFormat("yyyyMMMddHmmss"); String dateNow = formatter.format(currentDate.getTime()); File dir = new File(mImagePath); if(!dir.exists()) dir.mkdirs(); File file = new File(mImagePath + "/" + dateNow +".png"); FileOutputStream fos; try { fos = new FileOutputStream(file); mBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); fos.close(); Toast.makeText(getApplicationContext(), "File saved at \n"+mImagePath + "/" + dateNow +".png", Toast.LENGTH_LONG).show(); } catch (FileNotFoundException e) { Log.e("Panel", "FileNotFoundException", e); } catch (IOException e) { Log.e("Panel", "IOEception", e); } return true; 

Y aquí hay un ejemplo de imágenes:

Aquí es cómo se ve mi lienzo antes de guardar:

Introduzca aquí la descripción de la imagen

Y aquí está la imagen después de guardarlo en la tarjeta sd:

Introduzca aquí la descripción de la imagen

One Solution collect form web for “Android Paint PorterDuff.Mode.CLEAR”

El problema con el código fingerpaint es que lo que ves no es lo mismo que se comprime en el png. Mira en onDraw (). Primero dibuja la pantalla en blanco. A continuación, agregue el mapa de bits. Debido a que utilizó Porter Duff Clear, la parte borrada del mapa de bits contiene realmente píxeles negros transparentes (valor 0x00000000). Pero porque usted tiene el fondo blanco estos píxeles negros muestran como blanco.

Para solucionar esto, cambia el código de guardar para hacer lo mismo que el código de código

  try { fos = new FileOutputStream(file); Bitmap saveBitmap = Bitmap.createBitmap(mBitmap); Canvas c = new Canvas(saveBitmap); c.drawColor(0xFFFFFFFF); c.drawBitmap(mBitmap,0,0,null); saveBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); saveBitmap.recycle(); ... 

O no utilice PortDuff.Clear:

  case ERASE_MENU_ID: mPaint.setColor(Color.WHITE); 
  • Tratamiento de mapas de bits grandes (mosaico de un pequeño mapa de bits para crear papel tapiz)
  • API básica de Android v2 MapActivity outOfMemory con 10 marcadores
  • mapa de bits de Android a matriz de bytes sin compresión
  • Cómo dibujar un mapa de bits en un lienzo, respetando los valores alfa del mapa de bits?
  • GetDrawingCache () devuelto Bitmap no actualizado
  • ¿Cómo agrego el relleno a un mapa de bits y un color en una lista de capas
  • Convertir un mapa de bits en GrayScale en Android
  • Pixels de Bitmap de Android: ¿escribir directamente al archivo?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.