Comment colorer une image bitmap à une couleur unie
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%.
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" />