Pergunta

Como alguém faria para tingir um bitmap para uma cor sólida, substituindo efetivamente todos os pixels que têm um alfa> 0 para um determinado valor RGB?Além disso, como fazer a mesma coisa, mas mantendo o alfa para cada pixel?Não estou procurando operações por pixel, pois elas tendem a ser lentas.

Tentei usar um ColorMatrixColorFilter e um ColorFilter, que tingem o bitmap, mas eles colorem em vez de fazer uma coloração 100%.

Foi útil?

Solução

Resolvi isso usando um PorterDuffColorFilter

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

Outras dicas

Apenas para dar uma resposta mais completa.

Isso pegará um bitmap e produzirá um novo bitmap colorido:

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;
}

Se o seu bitmap for um drawable que você deseja usar em um layout, você pode fazer um novo drawable (.xml) que faz referência ao drawable original (por exemplo, .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" />
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top