You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android OpenGL中实现亮度与对比度联合滤镜

合并亮度与对比度滤镜的实现方案

没问题,要实现同时调节亮度和对比度且参数互不干扰的滤镜,只需要把两个效果的逻辑整合到同一个片段着色器中,同时在Java类里独立维护两个参数的状态即可。下面是完整的实现代码和关键说明:

完整代码实现

public class GlBrightnessContrastFilter extends GlFilter {
    // 整合了亮度和对比度逻辑的片段着色器
    private static final String BRIGHTNESS_CONTRAST_FRAGMENT_SHADER = 
        "precision mediump float;\n" +
        "varying vec2 vTextureCoord;\n" +
        "uniform lowp sampler2D sTexture;\n" +
        "uniform lowp float brightness;\n" +
        "uniform lowp float contrast;\n" +
        "\n" +
        "void main()\n" +
        "{\n" +
        "    lowp vec4 textureColor = texture2D(sTexture, vTextureCoord);\n" +
        "    // 先处理对比度,再叠加亮度,确保效果互不干扰\n" +
        "    lowp vec3 processedColor = ((textureColor.rgb - vec3(0.5)) * contrast + vec3(0.5));\n" +
        "    processedColor += vec3(brightness);\n" +
        "    gl_FragColor = vec4(processedColor, textureColor.w);\n" +
        "}";

    private float brightness = 0f;
    private float contrast = 1f; // 对比度默认值为1,即无效果

    public GlBrightnessContrastFilter() {
        super(DEFAULT_VERTEX_SHADER, BRIGHTNESS_CONTRAST_FRAGMENT_SHADER);
    }

    public void setBrightness(float brightness) {
        this.brightness = brightness;
    }

    public void setContrast(float contrast) {
        this.contrast = contrast;
    }

    @Override
    public void onDraw() {
        // 同时传递亮度和对比度参数给着色器
        GLES20.glUniform1f(getHandle("brightness"), this.brightness);
        GLES20.glUniform1f(getHandle("contrast"), this.contrast);
    }
}

关键要点说明

  • 着色器逻辑整合:在片段着色器中同时声明brightness和contrast两个uniform变量,颜色计算时先处理对比度(基于0.5灰度值调整),再叠加亮度,这样两个效果的叠加顺序合理,不会互相影响。
  • 参数独立维护:Java类中分别维护brightness和contrast两个成员变量,各自的set方法仅修改对应参数,不会重置另一个参数的值。
  • 绘制时传递所有参数:在onDraw方法中同时设置两个uniform的值,确保每次绘制都会应用当前的亮度和对比度状态,避免修改一个参数时另一个参数的设置失效。

内容的提问来源于stack exchange,提问作者Aadi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:53:52