首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ColorMatrix调整亮度

使用ColorMatrix调整亮度
EN

Stack Overflow用户
提问于 2012-02-07 19:02:46
回答 2查看 3K关注 0票数 3

我正在尝试使用ColorMatrix调整图像的亮度(你可以在Photoshop中看到这个选项,当你试图调整色调时,亮度和亮度是两个不同的功能),但我不知道应该更改哪些值来实现这一点。

目前,我可以使用以下代码更改色调

代码语言:javascript
复制
public static void adjustHue(ColorMatrix cm, float value)
    {
        value = cleanValue(value, 180f) / 180f * (float) Math.PI;
        if (value == 0)
        {
            return;
        }
        float cosVal = (float) Math.cos(value);
        float sinVal = (float) Math.sin(value);
        float lumR = 0.213f;
        float lumG = 0.715f;
        float lumB = 0.072f;
        float[] mat = new float[]
        { 
                lumR + cosVal * (1 - lumR) + sinVal * (-lumR), lumG + cosVal * (-lumG) + sinVal * (-lumG), lumB + cosVal * (-lumB) + sinVal * (1 - lumB), 0, 0, 
                lumR + cosVal * (-lumR) + sinVal * (0.143f), lumG + cosVal * (1 - lumG) + sinVal * (0.140f), lumB + cosVal * (-lumB) + sinVal * (-0.283f), 0, 0,
                lumR + cosVal * (-lumR) + sinVal * (-(1 - lumR)), lumG + cosVal * (-lumG) + sinVal * (lumG), lumB + cosVal * (1 - lumB) + sinVal * (lumB), 0, 0, 
                0f, 0f, 0f, 1f, 0f, 
                0f, 0f, 0f, 0f, 1f };
        cm.postConcat(new ColorMatrix(mat));
    }

我想了解如何使用colormatrix以同样的方式改变亮度。如果有任何其他方法来实现这一点,我愿意寻求解决方案:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-10 19:05:31

Ok..So我终于想通了。

可以使用PorterDuffColorFilter类调整亮度

下面是我使用的方法

代码语言:javascript
复制
public static PorterDuffColorFilter applyLightness(int progress) {

    if(progress>0)
    {
        int value = (int) progress*255/100;
        return new PorterDuffColorFilter(Color.argb(value, 255, 255, 255), Mode.SRC_OVER);
    } else {
        int value = (int) (progress*-1)*255/100;
        return new PorterDuffColorFilter(Color.argb(value, 0, 0, 0), Mode.SRC_ATOP);
    }

}

进度值从-100 (暗)到100(亮)

只需将photoshop中的值传递给此方法即可。你得到的滤镜可以和画布和画布一起使用。

希望这对某些人有帮助。

票数 4
EN

Stack Overflow用户

发布于 2014-11-28 06:33:01

您可以使用此选项来更改亮度

代码语言:javascript
复制
public static void adjustLightness(ColorMatrix cm, float value)
{
    value = cleanValue(value, 100);
    if (value == 0)
    {
        return;
    }

    float[] mat = new float[]
            {
                    1,0,0,0,value,
                    0,1,0,0,value,
                    0,0,1,0,value,
                    0,0,0,1,0,
                    0,0,0,0,1
            };
    cm.postConcat(new ColorMatrix(mat));
}

//Helper method
protected static float cleanValue(float p_val, float p_limit)
{
    return Math.min(p_limit, Math.max(-p_limit, p_val));
}

你可以阅读更多的here,但我建议你使用RenderScript,因为它的速度很快。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9175088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档