Конвертирование png в drawable, затем colorfilter, затем bitmap - не работает - PullRequest
0 голосов
/ 10 декабря 2018

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

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

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

1 Ответ

0 голосов
/ 11 декабря 2018

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

        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);
...