java - 使用函数更改位图颜色

标签 java android matrix bitmap colormatrix

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

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

相关文章:

java - MySQL/Hibernate 使用映射为 LocalTime 的列检索错误数据

java - RabbitMQ 请求响应和消息确认

android - 如何在 Activity 中使背景图像透明?

android - 如何在 ARCore View 中定位具有纬度/经度的对象?

java - JTabbedPane 显示后如何隐藏它?

java - 如何测量使用UDP协议(protocol)通信的服务器和客户端之间的响应时间?

java - Android全屏摄像头——同时保持摄像头选择比例

c - 是否可以从 int** 复制到另一个 int** 而不是逐个元素?

image - Matlab 中观察值和变量之间的差异

php - 将 K 个共面点旋转到平行于 x,y 平面的平面