使用函数更改位图颜色

4
我需要一个函数,它可以获取位图并返回更改颜色后的位图。它需要快速简单。
它的目的是更改颜色,同时也是带有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);

祝读者好运!
4个回答

0

------- 已修复 --------

我通过更改颜色矩阵来解决了这个问题,现在位图将会改变颜色而不显示 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);

祝读者好运!


0
我不明白为什么独立运行会排除使用Canvas的可能性。您可以创建一个新的Bitmap,创建一个Canvas来绘制它,然后使用已设置颜色过滤器的Paint(使用setColorFilter)来绘制原始的Bitmap。PorterDuffColorFilter类可能对此有所帮助。

0

我不明白你改变颜色的目的是什么,以及参数int deg的含义是什么?对于alpha问题:如果你的Bitmap bmpGrayscale中的颜色模型从RGB_565更改为ARGB_8888,可能会有所帮助,因为它具有alpha通道。查看Bitmap.Config


谢谢你的帮助。我解决了! :-) - Oliver Dixon

0

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