Ответ 1
Я решил это, используя PorterDuffColorFilter
Paint paint = new Paint();
paint.setColorFilter(new PorterDuffColorFilter(targetColor, PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(resource, matrix, paint);
Как можно покрасить битмап в сплошной цвет, эффективно заменив все пиксели, имеющие альфa > 0, на заданное значение RGB? Кроме того, как сделать то же самое, но сохранить альфа для каждого пикселя? Я не ищу работу с пикселями, поскольку они имеют тенденцию быть медленными.
Я попробовал использовать ColorMatrixColorFilter и ColorFilter, которые подчеркивают Bitmap, но они раскрашивают вместо 100% -ного оттенка.
Я решил это, используя PorterDuffColorFilter
Paint paint = new Paint();
paint.setColorFilter(new PorterDuffColorFilter(targetColor, PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(resource, matrix, paint);
Просто чтобы дать более полный ответ.
Это приведет к растровому изображению и выведет новый тонированный растровый рисунок:
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;
}