代码之家  ›  专栏  ›  技术社区  ›  IFKCode

在C中将RGB转换为HSL++

  •  3
  • IFKCode  · 技术社区  · 7 年前

    当前正在尝试将RGB转换为HSL。我不知道我错在哪里,但我的H&S值显示为0,这就是问题所在。 以下是我所拥有的:

    #include <iostream>
    #include <cstdlib>
    #include <cmath>
    float Min( float fR, float fG, float fB )
    {
        float fMin = fR;
        if (fG < fMin)
        {
            fMin = fG;
        }
        if (fB < fMin)
        {
            fMin = fB;
        }
        return fMin;
    }
    
    
    float Max( float fR, float fG, float fB)
    {
        float fMax = fR;
        if (fG > fMax)
        {
            fMax = fG;
        }
        if (fB > fMax)
        {
            fMax = fB;
        }
        return fMax;
    }
    
    void RGBToHSL( int R, int G, int B, int& H, int& S, int& L )
    {
        int r = 100.0;
        int g = 100.0;
        int b = 200.0;
    
        float fR = r / 255.0;
        float fG = g / 255.0;
        float fB = b / 255.0;
    
    
        float fCMin = Min(fR, fG, fB);
        float fCMax = Max(fR, fG, fB);
    
    
        L = 50 * (fCMin + fCMax);
    
        if (fCMin = fCMax)
        {
            S = 0;
            H = 0;
            return;
    
        }
        else if (L < 50)
        {
            S = 100 * (fCMax - fCMin) / (fCMax + fCMin);
        }
        else
        {
            S = 100 * (fCMax - fCMin) / (2.0 - fCMax - fCMin);
        }
    
        if (fCMax == fR)
        {
            H = 60 * (fG - fB) / (fCMax - fCMin);
        }
        if (fCMax == fG)
        {
            H = 60 * (fB - fR) / (fCMax - fCMin) + 120;
        }
        if (fCMax == fB)
        {
            H = 60 * (fR - fG) / (fCMax - fCMin) + 240;
        }
        if (H < 0)
        {
            H = H + 360;
        }
    }
    

    亮度值是58,这很好,但我希望看到的色调值是240,饱和度值是47。

    任何帮助都将不胜感激。

    谢谢

    1 回复  |  直到 7 年前
        1
  •  3
  •   lamandy    7 年前

    if (fCMin = fCMax)

    应该是

    if (fCMin == fCMax)