ColorMatrix 没有直接处理对比度的方法。
内部有一个 4x5的矩阵数组:
* <pre>
* R’ = a*R + b*G + c*B + d*A + e;
* G’ = f*R + g*G + h*B + i*A + j;
* B’ = k*R + l*G + m*B + n*A + o;
* A’ = P*R + q*G + r*B + s*A + t;</pre>
找到 Android-GPUImage 实现
public static final String CONTRAST_FRAGMENT_SHADER = "" +
"varying highp vec2 textureCoordinate;\n" +
" \n" +
" uniform sampler2D inputimageTexture;\n" +
" uniform lowp float contrast;\n" +
" \n" +
" void main()\n" +
" {\n" +
" lowp vec4 textureColor = texture2D(inputimageTexture, textureCoordinate);\n" +
" \n" +
" gl_FragColor = vec4(((textureColor.rgb - vec3(0.5)) * contrast + vec3(0.5)), textureColor.w);\n" +
" }";
仿照 gl_FragColor
来处理:
//对比度范围 [0,2f]
val matrix = ColorMatrix() //4x5矩阵,rgba+偏移
matrix.setScale(lum, lum, lum, 1f)
val ary = matrix.array
ary[0] = (ary[0] - 0.5f) * contrast + 0.5f
ary[1] = (ary[1] - 0.5f) * contrast + 0.5f
ary[2] = (ary[2] - 0.5f) * contrast + 0.5f
ary[5] = (ary[5] - 0.5f) * contrast + 0.5f
ary[6] = (ary[6] - 0.5f) * contrast + 0.5f
ary[7] = (ary[7] - 0.5f) * contrast + 0.5f
ary[10] = (ary[10] - 0.5f) * contrast + 0.5f
ary[11] = (ary[11] - 0.5f) * contrast + 0.5f
ary[12] = (ary[12] - 0.5f) * contrast + 0.5f
paint.colorFilter = ColorMatrixColorFilter(matrix)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。