Конвертирование png в drawable, затем colorfilter, затем bitmap - не работает

У меня есть PNG, состоящий из белого и серого (оба альфа 100%) и полностью прозрачных областей (альфа ==0). Я пытаюсь раскрасить значок в разные цвета, а затем вернуть растровое изображение. Это мой код

        Drawable iconDrawable = getResources().getDrawable(iconDrawableId);
        iconDrawable.mutate().setColorFilter(0xffff00ff, PorterDuff.Mode.MULTIPLY);
        Bitmap outputBmp = ((BitmapDrawable) iconDrawable).getBitmap();

К сожалению, моя иконка остается белой и серой. Что я наблюдаю?

1 ответ

После подсказки Майка я понял, что могу сделать это так:

        Drawable iconDrawable = getResources().getDrawable(iconDrawableId);
        iconDrawable.mutate().setColorFilter(0xffffff00, PorterDuff.Mode.MULTIPLY);
        Bitmap bitmap = Bitmap.createBitmap(iconDrawable.getIntrinsicWidth(), iconDrawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        iconDrawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
        iconDrawable.draw(canvas);

Но в конце концов я пошел на это

        Bitmap whiteBmp = BitmapFactory.decodeResource(getResources(), iconDrawableId);
        Paint paint = new Paint();
        paint.setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.MULTIPLY));
        Bitmap bitmapResult = Bitmap.createBitmap(whiteBmp.getWidth(), whiteBmp.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmapResult);
        canvas.drawBitmap(whiteBmp, 0, 0, paint);
Другие вопросы по тегам