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); 
  • NullPointerException en getReseources () Bitmap Array
  • Opengl es 2.0 dibujar superposición de mapa de bits en vídeo
  • Imagen de fondo de Android Widget Cambiar
  • Ventaja dibujable sobre mapa de bits para la memoria en android
  • Obtener coordenadas de una imagen de mapa de bits de un ImageView dos veces más pequeño
  • Convertir un mapa de bits en GrayScale en Android
  • Lona de Android a mapa de bits
  • Aplicación de una superposición (filtro de imagen) a un mapa de bits
  • Obtener la rotación de ExifInterface siempre devuelve 0
  • SetImageViewBitmap no funciona en el widget android
  • Escala de imagen sin perder calidad de imagen no funcionó
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.