Android:更改 png 文件颜色的最简单方法
Posted
技术标签:
【中文标题】Android:更改 png 文件颜色的最简单方法【英文标题】:Android: Easiest way to change the colour of a png file 【发布时间】:2012-12-15 03:54:15 【问题描述】:我正在编写一个具有基本精灵(气球)的游戏 - 目前我创建了 2 个不同颜色的气球 PNG 文件,我需要创建更多(可能另外 5 个左右)并且不想要拥有 7 个不同的 png 文件。 (这将是 20 个额外的文件,因为我有 4 种不同的大小用于缩放目的)我宁愿坚持 1 - 我目前拥有的文件是黄色和红色的(几乎是实心的,但不完全是 - 它们有详细信息)。
问题 - 有没有一种简单的方法可以改变我现有 PNG 文件的颜色?我见过有人提到setColor
和setColorFilter
,但我不知道如何使用它们。这些甚至可以在已经有颜色的 PNG 文件上工作,还是只能在白色 PNG 文件上工作(我不认为我的 PNG 实际上只能是白色的)?
感谢大家的帮助,我们将不胜感激。
【问题讨论】:
【参考方案1】:您可以只使用黑色气球 png 文件来创建不同颜色的气球。
下面的代码使用一些花哨的混合模式技巧来设置颜色。
protected BitmapDrawable setIconColor(int color)
if (color == 0)
color = 0xffffffff;
final Resources res = getResources();
Drawable maskDrawable = res.getDrawable(R.drawable.actionbar_icon_mask);
if (!(maskDrawable instanceof BitmapDrawable))
return;
Bitmap maskBitmap = ((BitmapDrawable) maskDrawable).getBitmap();
final int width = maskBitmap.getWidth();
final int height = maskBitmap.getHeight();
Bitmap outBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(outBitmap);
canvas.drawBitmap(maskBitmap, 0, 0, null);
Paint maskedPaint = new Paint();
maskedPaint.setColor(color);
maskedPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_ATOP));
canvas.drawRect(0, 0, width, height, maskedPaint);
BitmapDrawable outDrawable = new BitmapDrawable(res, outBitmap);
return outDrawable;
【讨论】:
漂亮!已经在这个一个多小时了。正在尝试根据用户设置为标记(Google Map v2 API)着色。你救了我!比每种颜色都有一个图像(可绘制)要好得多。【参考方案2】:您可以尝试使用随机 r g b 值定义自定义 ColorMatrix:
Random rand = new Random();
int r = rand.nextInt(256);
int g = rand.nextInt(256);
int b = rand.nextInt(256);
ColorMatrix cm = new ColorMatrix();
cm.set(new float[]
1, 0, 0, 0, r,
0, 1, 0, 0, g,
0, 0, 1, 0, b,
0, 0, 0, 1, 0 ); // last line is antialias
paint.setColorFilter(new ColorMatrixColorFilter(cm));
canvas.drawBitmap(myBitmap, toX, toY, paint);
希望对你有帮助。
【讨论】:
你最好用灰度输入。 大家好,非常感谢,我会试试这个建议,我当然可以将我当前的图形转换为灰度 - 干杯! Nitin 和 Peekler - 抱歉,我病了,所以没能早点找到我的电脑。我已经查看了这两个建议并且我已经实现了 Peekler 的方法,因为它是两者中更简单的,并且似乎可以满足我的需要。但是非常感谢你们的帮助,非常感谢。我需要知道如何从变化中排除某种颜色 - 我的气球有黑色边框,我想保持黑色 - 有什么想法吗?还是我应该提出一个新问题?再次感谢大家!以上是关于Android:更改 png 文件颜色的最简单方法的主要内容,如果未能解决你的问题,请参考以下文章
使用 python/pandas 在 excel 上创建颜色渐变的最简单方法?