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); 
  • Android Bitmap.createScaledBitmap arroja java.lang.OutOfMemoryError sobre todo en Jelly Bean 4.1
  • Android ImageReader.acquireLatestImage devuelve JPG no válido
  • Mostrar imagen grande de la tarjeta SD en Android
  • Cómo dibujar una porción de mapa de bits a través de lienzo DrawBitmap
  • Qué tamaño almacenar imagen en el servidor para utilizar con la aplicación de Android
  • Visualización de lienzo / mapa de bits al instante durante la depuración en eclipse
  • Configuración de varios elementos personalizados en MultiAutoCompleteTextView: Android
  • Android: cómo crear un botón sobre Bitmap dinámicamente o botón OVERLAYING?
  • Convertir vista en mapa de bits
  • La detección facial no detecta caras, Android
  • Convertir la textura procesada de OpenGL ES 2.0 en mapa de bits y volver
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.