C++ GDI:我正在寻求颜色矩阵的解释,以便我可以创建任何颜色操作掩码

C++ GDI: I am seeking explanation for color matrix such that I can create any color manipulation mask

我正在尝试实现一个可以通过透明 window 操纵背景屏幕颜色属性的应用程序。基本上试图重新创建 Color Oracle. I am progressing here through C++:GDI+ resources. This GDI has a Color Matrix 概念。我能够为灰度创建过滤器(如上一个超链接中的示例所示)、亮度调整、饱和度调整;然而,作为色盲滤镜、蓝光滤镜、对比度调整等高级用例——我正在使用命中试验方法,如果有人能带我朝着正确的方向学习这种颜色的基础知识,那将会非常有效矩阵.

示例矩阵如下所示,它在限制亮度分量的同时将饱和度提高了一个小因子。

MAGCOLOREFFECT magEffectSaturationBoost =
    { { // MagEffectBright
        {  1.02f,   0.0f,   0.0f,  0.0f,  1.0f },
        {   0.0f,  1.02f,   0.0f,  0.0f,  1.0f },
        {   0.0f,   0.0f,  1.02f,  0.0f,  1.0f },
        {   0.0f,   0.0f,   0.0f,  1.0f,  0.0f },
        {  -0.1f,  -0.1f,  -0.1f,  0.0f,  0.0f }
      }
    }
    // Using the Matrix
    ret = MagSetColorEffect(hwndMag, &magEffectSaturationBoost);

It will be much efficient if anyone can take me in the right direction to learn fundamentals of this color matrix.

每个颜色向量乘以 5x5 矩阵,使颜色向量可能有 5 个元素长 - 第五个元素是虚拟元素,这允许对颜色执行其他操作(旋转、缩放等) .

在您的示例中,每个颜色分量乘以 1.02f 使颜色更亮,乘法后 - 从每个颜色分量中减去 0.1 值。

您可以在这里找到完整的解释:

https://docs.microsoft.com/en-us/windows/win32/gdiplus/-gdiplus-using-a-color-matrix-to-transform-a-single-color-use

和:

https://docs.microsoft.com/en-us/windows/win32/gdiplus/-gdiplus-coordinate-systems-and-transformations-about

更多链接:

https://docs.rainmeter.net/tips/colormatrix-guide/

https://www.integral-domain.org/lwilliams/math150/labs/matrixcolorfilter.php