4

我需要一个函数来获取位图并返回具有更改颜色的位图。它需要快速而简单。

它的目的是改变颜色,它也是一个带有 alpha 的 png。

我在网上看过,但我不能使用画布或任何外部的东西。该函数驻留在外部对象中(不要问..)

到目前为止,这是我尝试过的(不工作)。我知道我真的很接近,只是整理颜色矩阵并让 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);

祝读者好运!

4

4 回答 4

0

我不明白为什么独立会排除使用画布。您可以创建一个新的位图,创建一个画布以在其中绘制,然后使用具有颜色过滤器集的画图(使用setColorFilter)绘制原始位图。该PorterDuffColorFilter课程可能对此有所帮助。

于 2012-03-21T22:53:15.610 回答
0

我没有明白你改变颜色的目的是什么,参数是什么意思int deg?对于 alpha 的事情:它可能有助于改变你的颜色模型Bitmap bmpGrayscalefrom RGB_565toARGB_8888因为那个有一个 alpha 通道。查看 Bitmap.Config

于 2012-03-22T22:10:17.930 回答
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
}); 

我必须改变的第二件事是这行代码:

位图 newBM = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);

祝读者好运!

于 2012-03-22T22:20:04.863 回答
0

您还没有确切地说出您要对颜色进行哪些更改。您定义的cm矩阵看起来像它有一个额外的行,它删除了红色,只留下绿色和 alpha,并将蓝色乘以 255。我猜这不是你想要的。

我将通过http://developer.android.com/reference/android/graphics/ColorMatrix.html上的文档

如果您尝试旋转色调,您可能会从这个答案中获得一些很好的信息: https ://stackoverflow.com/a/8510751/5987

于 2012-03-22T22:26:48.277 回答