Как отточить растровое изображение до сплошного цвета

Как можно покрасить битмап в сплошной цвет, эффективно заменив все пиксели, имеющие альфa > 0, на заданное значение RGB? Кроме того, как сделать то же самое, но сохранить альфа для каждого пикселя? Я не ищу работу с пикселями, поскольку они имеют тенденцию быть медленными.

Я попробовал использовать ColorMatrixColorFilter и ColorFilter, которые подчеркивают Bitmap, но они раскрашивают вместо 100% -ного оттенка.

Ответы

Ответ 1

Я решил это, используя PorterDuffColorFilter

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

Ответ 2

Просто чтобы дать более полный ответ.

Это приведет к растровому изображению и выведет новый тонированный растровый рисунок:

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