opengl 实现 Photoshop 亮度 对比度 调节功能

文章目录

    • 源码
    • Photoshop的亮度对比度工具
    • 原理
    • shader
    • 效果

源码

VirtualStudio2019的工程。可直接运行

Photoshop的亮度对比度工具

这是photoshop的工具,下面用opengl实现该功能
opengl 实现 Photoshop 亮度 对比度 调节功能_第1张图片

原理

公式:

y = x - 255.0 − b r i g h t n e s s 2 \frac{255.0-brightness}{2} 2255.0brightness* tan(45+44* c o n t r a s t 255 \frac{contrast}{255} 255contrast ) + 255 + b r i g h t n e s s 2 \frac{255+brightness}{2} 2255+brightness

实现:

    float B = brightness / 255.0;
	float c = contrast / 255.0;
	float k = tan((45 + 44 * c) / 180.0 * PI);

	colorrbg = ((colorrbg*255.0 - 127.5 * (1.0 - B)) * k + 127.5 * (1.0 + B)) / 255.0;

shader

#version 330 core
precision mediump float;

in vec2 TexCoord;
out vec4 outColor;
uniform sampler2D inputTexture;
uniform int brightness;
uniform int contrast;

vec4 tmp(vec3 colorrbg){
    float PI = 3.1415926;
	float B = brightness / 255.0;
	float c = contrast / 255.0;
	float k = tan((45 + 44 * c) / 180.0 * PI);

	colorrbg = ((colorrbg*255.0 - 127.5 * (1.0 - B)) * k + 127.5 * (1.0 + B)) / 255.0;
    return vec4(colorrbg,1.0);
}

void main(){
    
    vec3 tmpColor = texture(inputTexture, TexCoord).rgb;
    outColor = tmp(tmpColor);
}

效果

原图:
opengl 实现 Photoshop 亮度 对比度 调节功能_第2张图片

亮度+50
opengl 实现 Photoshop 亮度 对比度 调节功能_第3张图片

亮度-50
opengl 实现 Photoshop 亮度 对比度 调节功能_第4张图片

对比度-50
opengl 实现 Photoshop 亮度 对比度 调节功能_第5张图片

对比度+50
opengl 实现 Photoshop 亮度 对比度 调节功能_第6张图片

你可能感兴趣的:(opengl,opengl,c++,Photoshop,图像处理,亮度对比度)