Android Paint PorterDuff.Mode.CLEAR

Je travaille sur une application qui s'appuie sur une toile similaire à la démo Finger Paint de Android SDK. Mon problème est quand j'utilise PorterDuff.Mode.CLEAR . Lors du dessin et de la Toile et si j'essaye d'effacer quelque chose, ça marche bien. Mais si j'essaie de sauvegarder mon image en tant que fichier PNG , les traits de la gomme sont de couleur noir, et je ne sais pas pourquoi cela se produit. Voici un exemple de ce que je fais:

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

La gomme :

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

Et comment je sauvegarde l'image:

  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; 

Et voici un exemple d'images:

Voici comment est ma toile avant d'enregistrer:

Entrez la description de l'image ici

Et voici l'image après la sauvegarder sur la carte SD:

Entrez la description de l'image ici

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

Le problème avec le code des doigts est que ce que vous voyez n'est pas le même qui est compressé dans le png. Regardez onDraw (). D'abord, vous dessinez l'écran blanc. Ensuite, vous ajoutez Bitmap. Parce que vous avez utilisé Porter Duff Clear, la partie effacée du bitmap contient des pixels noirs réellement transparents (valeur 0x00000000). Mais parce que vous avez le fond blanc, ces pixels noirs apparaissent comme blancs.

Pour corriger cela, modifiez votre code de sauvegarde pour faire la même chose que le code du tirage

  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(); ... 

Ou n'utilisez pas PortDuff.Clear:

  case ERASE_MENU_ID: mPaint.setColor(Color.WHITE); 
  • Comment décrire un TextView?
  • La ligne de dessin en peinture au doigt supprime l'image dessinée précédemment
  • Placement / chevauchement (index z) une vue ci-dessus des onglets de la barre d'action
  • Android se congèle
  • Comment peindre une couleur de dégradé dans Android sur un Canvas avec le changement de couleur?
  • Android: Canvas vs OpenGL
  • Comment rendre le chemin de traçage lisse tout en dessin avec un trait de largeur variable
  • Bogue évolutif semi-transparent général
  • coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.