Конвертирование 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);