Question

Comment peut-on aller sur un teinter Bitmap à une couleur unie, remplaçant efficacement tous les pixels qui ont une alpha> 0 à une valeur RGB donnée? De plus comment faire la même chose, mais en gardant l'alpha pour chaque pixel? Je ne cherche pas pour les opérations par pixel car ils ont tendance à être lent.

J'essayé d'utiliser un ColorMatrixColorFilter et un Colorfilter qui ne teinte Bitmap, mais ils coloriser au lieu d'effectuer une teinte à 100%.

Était-ce utile?

La solution

Je résolu ce problème en utilisant un PorterDuffColorFilter

Paint paint = new Paint();
paint.setColorFilter(new PorterDuffColorFilter(targetColor, PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(resource, matrix, paint);

Autres conseils

Juste pour donner une réponse plus complète.

Cela prendra une image bitmap et la sortie d'une nouvelle image teintée:

public static Bitmap tintImage(Bitmap bitmap, int color) {
    Paint paint = new Paint();
    paint.setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.SRC_IN));
    Bitmap bitmapResult = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmapResult);
    canvas.drawBitmap(bitmap, 0, 0, paint);
    return bitmapResult;
}

Si votre bitmap est un drawable que vous souhaitez utiliser dans une mise en page, alors vous pouvez faire une nouvelle drawable (.xml) que les références de votre drawable d'origine (par exemple .png).

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/plus"
     android:tint="#2c53e5" />
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top