首页 > 解决方案 > 将 png 转换为可绘制,然后是颜色过滤器,然后是位图 - 不工作

问题描述

我有一个由白色和灰色(alpha 100%)和完全透明区域(alpha==0)组成的 png。我正在尝试用不同的颜色为图标着色,然后返回一个位图。这是我的代码。

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

不幸的是,我的图标保持白色和灰色。我在监督什么?

标签: androidcolorsbitmapdrawableporter-duff

解决方案


在 Mikes 暗示后,我意识到我可以这样做:

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

推荐阅读