我需要一个函数,它可以获取位图并返回更改颜色后的位图。它需要快速简单。
它的目的是更改颜色,同时也是带有alpha通道的png图片。
我在网上查找过,但不能使用Canvas或其他外部内容。该函数驻留在外部对象中(不要问为什么)。
这是我迄今为止尝试过的代码(不起作用)。我知道我很接近成功,只需解决颜色矩阵和透明度的问题即可。
祝读者好运!
它的目的是更改颜色,同时也是带有alpha通道的png图片。
我在网上查找过,但不能使用Canvas或其他外部内容。该函数驻留在外部对象中(不要问为什么)。
这是我迄今为止尝试过的代码(不起作用)。我知道我很接近成功,只需解决颜色矩阵和透明度的问题即可。
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);
祝读者好运!