反转窗口保留色调

反转窗口保留色调

我喜欢 compiz 中的反转窗口颜色功能,但是我更希望能够只反转亮度,保留原始色调。我更希望有一个适用于所有窗口的全局功能,可以反转窗口的亮度,如果亮度比原始亮度暗,则使用该亮度,否则使用原始亮度。这样我就再也不用看着白屏了 ;)。

更新:

我认为在着色器中进行这样的改变neg.cpp 可能执行我想要的基本版本。我找到了 rgb 到 hsv 到 rgb 的 GLSL 代码,将其注入原始着色器,将设置v1.0 - v(我假设的范围value是 1.0,但我不确定),然后将结果转换回 rgb 并将其用作最终像素颜色:

/* rgb:hsv conversion based on:
   http://stackoverflow.com/questions/15095909/from-rgb-to-hsv-in-opengl-glsl */
static std::string fragment_function = "                                         \n\
void neg_fragment () {                                                           \n\
    // convert to hsv                                                            \n\
    vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);                             \n\
    vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g));            \n\
    vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));            \n\
    float d = q.x - min(q.w, q.y);                                               \n\
    float e = 1.0e-10;                                                           \n\
    vec3 c = vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);   \n\
    // flip luminosity (value)                                                   \n\
    c.z = 1.0 - c.z                                                              \n\
    // convert back to rgb                                                       \n\
    K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);                                    \n\
    p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);                                 \n\
    c = c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);                       \n\
    // use converted rgb value                                                   \n\
    gl_FragColor = vec4(c, gl_FragColor.a);                                      \n\
}                                                                                \n\
";

我在 Bazaar 上找到了 compiz 存储库。我将浏览源代码并尝试找到反转颜色模块的实现位置

如果有人想知道,该插件是“负面”还是“负面”插件,源代码的相关部分是在 bazaar.launchpad.net 上

该插件原始自述文件上的所有三个联系电子邮件地址都已消失 - 如果有人有办法联系原始开发人员,我们将不胜感激。

我没有太多时间投入到这个方面,但如果有人能找到一种方法来让 compiz 进行编译并且可以测试它,我将不胜感激!

相关内容