在Android中如何给位图上色?

20

我使用以下代码将位图绘制到画布上:

_playerImage = BitmapFactory.decodeResource(getResources(), R.drawable.player);

我该如何将这张图片变成白色? 我想让这张图片在顶部卷轴游戏中像敌人被子弹击中时一样闪白。

我需要使用除了BitmapFactory之外的其他东西吗?

1个回答

46
您可以在绘制位图时,在您的Paint上使用一个ColorFilter

8
太棒了!非常感谢! "Paint p = new Paint(Color.RED); ColorFilter filter = new LightingColorFilter(Color.RED, 1); p.setColorFilter(filter);" 将颜色设置为红色的画笔p,经过灯光颜色过滤器filter的处理后,再次使用p绘制时,颜色会受到过滤器影响而发生变化。 - FoppyOmega
1
嗨,Romain,有没有一种绘制着色位图的方法,不需要为每个绘制调用创建新的ColorFilter实例?假设您有几百个精灵需要以不同的颜色进行着色。这将需要为每个drawBitmap调用创建一个新的lightingColorFilter。这确实与整个项目黄油哲学“不要在呈现调用中分配”不太相符。特别是因为着色与混合/调制opengl后端直接相关,不需要分配任何对象。那么drawBitmap(...,int mul,int add)调用呢? - P.Melch
2
@P.Melch 很好的问题(虽然这是很旧的问题,但我把它放在这里是因为它很相关,其他人可能会发现它有用)...如果你只有一组相对较小的颜色,你可以保留几个ColorFilter对象的实例(可能使用池),因为LightingColorFilter似乎不支持更改其颜色。如果有更好的想法,那肯定会很有帮助。 - kungphu
如何使用Paint对象在颜色上填充颜色? - jack
2
注意:FoppyOmega的代码片段应为“Paint p = new Paint();”。Paint构造函数的可选int参数不是颜色。我卡在这里一段时间,因为它可以正常编译:/。 - stewbasic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接