android - 将 png 转换为可绘制,然后是颜色过滤器,然后是位图 - 不工作
问题描述
我有一个由白色和灰色(alpha 100%)和完全透明区域(alpha==0)组成的 png。我正在尝试用不同的颜色为图标着色,然后返回一个位图。这是我的代码。
Drawable iconDrawable = getResources().getDrawable(iconDrawableId);
iconDrawable.mutate().setColorFilter(0xffff00ff, PorterDuff.Mode.MULTIPLY);
Bitmap outputBmp = ((BitmapDrawable) iconDrawable).getBitmap();
不幸的是,我的图标保持白色和灰色。我在监督什么?
解决方案
在 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);
推荐阅读
- node.js - 无法“nvm install 8.0.0”
- notifications - 关于向外部系统通知状态更改的方法的建议:业务层通知与数据库触发器
- google-cloud-platform - 添加 Google Cloud SDK apt 存储库签名密钥的 Ansible 任务
- google-apps-script - 通过将联系人 API 迁移到人员 API,我如何获取具有特定标签的联系人列表?
- google-chrome-extension - Chrome 扩展 - 从商店更新刷新所有标签
- c++ - 提升 asio 证书验证
- mysql - 我无法使用 MySQL 数据库在 Heroku 上部署 Node.js 应用程序
- if-statement - 为返回布尔值并接受两个非原始类型参数的方法编写 junit 测试
- swift - swiftui 不会更新新状态
- excel - countifs 除了根据下拉列表计算变化的列