android - una - rueda de color photoshop
Cómo teñir un mapa de bits a un color sólido (3)
¿Cómo se podría hacer para teñir un mapa de bits a un color sólido, reemplazando efectivamente todos los píxeles que tienen un alfa> 0 a un valor RGB dado? Además, ¿cómo hacer lo mismo, pero manteniendo el alfa para cada píxel? No estoy buscando operaciones por píxel ya que tienden a ser lentas.
Intenté usar un ColorMatrixColorFilter y un ColorFilter, que tintan el mapa de bits, pero se colorean en lugar de realizar un tinte al 100%.
Resolví esto usando un PorterDuffColorFilter
Paint paint = new Paint();
paint.setColorFilter(new PorterDuffColorFilter(targetColor, PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(resource, matrix, paint);
Sólo para dar una respuesta más completa.
Esto tomará un mapa de bits y generará un nuevo mapa de bits teñido:
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 su mapa de bits es dibujable que desea usar en un diseño, puede crear un nuevo dibujable (.xml) que haga referencia a su dibujable original (por ejemplo, .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" />