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

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); 
  • Cómo cargar una imagen de una URL en un viewpager
  • Guardar hardware acelerado android lienzo como mapa de bits
  • Android - efecto de deformación de imagen
  • Almacenamiento de mapa de bits para múltiples actividades?
  • cómo rotar el mapa de bits en android en el punto central utilizando matriz
  • Pixels de Bitmap de Android: ¿escribir directamente al archivo?
  • Compartir Bitmap () en android para twitter, facebook, correo
  • decodeStream devuelve null
  • Preservar la calidad de la imagen cuando decodifique el flujo en android
  • Cómo convertir un dibujable a un mapa de bits?
  • Encontrar el color dominante de una imagen en un @drawable de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.