【问题标题】:Change Bitmap Colour with function用函数改变位图颜色
【发布时间】:2012-03-21 22:25:32
【问题描述】:

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

它的目的是改变颜色,也是一个带有alphas的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);

祝各位读者好运!

【问题讨论】:

    标签: java android matrix bitmap colormatrix


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我不明白你改变颜色的目的是什么,参数int deg是什么意思?对于 alpha 问题:将 Bitmap bmpGrayscale 中的颜色模型从 RGB_565 更改为 ARGB_8888 可能会有所帮助,因为该模型具有 alpha 通道。 Look at Bitmap.Config

      【讨论】:

      • 感谢您的帮助。我想到了! :-)
      【解决方案3】:

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

      我已通过更改颜色矩阵来解决此问题,现在位图将更改颜色并且不显示 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);

      祝各位读者好运!

      【讨论】:

        【解决方案4】:

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

        我将按照http://developer.android.com/reference/android/graphics/ColorMatrix.html 的文档进行操作

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多