我需要一个函数来获取位图并返回具有更改颜色的位图。它需要快速和简单。
它的目的是改变颜色,它也是一个带有 alpha 的 png。
我在网上看过,但我不能使用 Canvas 或任何外部的东西。该函数驻留在外部对象中(不要问..)
这是我到目前为止已经尝试过的(没用)。我知道我真的很接近,只是整理颜色矩阵并让 alpha 起作用。
public Bitmap changeBitmapColor(Bitmap sourceBitmap, int deg)
{
int width, height;
height = sourceBitmap.getHeight();
width = sourceBitmap.getWidth();
Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
Canvas c = new Canvas(bmpGrayscale);
Paint paint = new Paint();
//figure out color matricies.
ColorMatrix cm = new ColorMatrix();
//cm.setSaturation(0);
cm.set(new float[]
{
0, 0, 0, 0, 0,
0, 1, 0, 0, 0,
0, 0, 255, 0, 0,
0, 0, 0, 1, 0,
0, 0, 0, 0, 1
});
ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
paint.setColorFilter(f);
c.drawBitmap(sourceBitmap, 0, 0, paint);
return bmpGrayscale;
}
任何帮助都会很棒!
-------- 已修复--------
我已经通过更改颜色矩阵解决了这个问题,现在位图将更改颜色并且不显示 alpha 值。
首先是矩阵:
cm.set(new float[]
{
0, 0, 0, 0, 0,
0, 1, 0, 0, 0,
0, 0, 140, 0, 0,
0, 0, 0, 1, 0,
0, 0, 0, 0, 1
});
我必须更改的第二件事是这行代码:
Bitmap newBM = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
祝读者好运!
最佳答案
我不明白为什么独立会排除使用 Canvas。您可以创建一个新的 Bitmap,创建一个 Canvas 以在其中绘制,然后使用具有颜色过滤器集(使用 setColorFilter
)的 Paint 绘制原始 Bitmap。 PorterDuffColorFilter
类(class)可能对此有所帮助。
关于java - 使用函数更改位图颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9813769/