Click here to Skip to main content
15,884,099 members
Please Sign up or sign in to vote.
3.00/5 (1 vote)
See more:
Hello, Im creating program for adjusting HSL to image with 3 sliders (hue saturation lightness) like photoshop, gimp etc and something going wrong. I have taken converting algorithm from wiki - http://ru.wikipedia.org/wiki/HSL(strange thing that in english and russian wiki algorithms are different) and here is my code

C++
CHslFilter::CHslFilter(float hue, float saturation, float lightness)
:m_r(0), m_g(0), m_b(0)
{
    if (saturation == 0)
    {
        m_r = m_g = m_b = lightness;
    }
    else
    {
        float temp2 = (lightness < 0.5f) ? lightness * (1.0f + saturation) : lightness + saturation - (lightness*saturation);
        float temp1 = 2.0f * lightness - temp2;
        float Hk = hue / 360;

        float temp3RGB[3] = {Hk + 1/3, Hk, Hk - 1/3};
        for (unsigned int i = 0; i != 3; ++i)
        {
            if (temp3RGB[i] < 0)
            {
                temp3RGB[i] += 1.0f;
            }
            else if (temp3RGB[i] > 1)
            {
                temp3RGB[i] -= 1.0f;
            }
        }

        for (unsigned int i = 0; i != 3; ++i)
        {
            float item = temp3RGB[i];

            if (item < 1/6)
            {
                item = temp1 + ((temp2 - temp1) * 6.0f * item);
            }
            else if (1/6 <= item && item < 1/2)
            {
                item = temp2;
            }
            else if (1/2 <= item && item < 2/3)
            {
                item = temp1 + ((temp2 - temp1) * (2/3 - item) * 6.0f);
            }
            else
            {
                item = temp1;
            }

            temp3RGB[i] = item;
        }

        m_r = temp3RGB[0];  m_r = temp3RGB[1];  m_b = temp3RGB[2];
    }

    m_r *= 255;
    m_g *= 255;
    m_b *= 255;

}

void CHslFilter::AdjustColor(float &r, float &g, float &b)const
{
    r += m_r;
    g += m_g;
    b += m_b;

    return;
}

function AdjustColor later just will receive every pixel of image and will modify it. Please can you answer me what im doing wrong? And sorry for my English
Posted
Updated 9-Oct-11 8:49am
v3
Comments
Sergey Alexandrovich Kryukov 10-Oct-11 15:41pm    
First, nothing wonderful about different algorithms. Russian is not just a language, it's a different way of thinking. :-)
Now, what's "going wrong"? For a software developer, there is no such thing. It needs precise problem report. What's the problem?
--SA
flaese 10-Oct-11 16:11pm    
Thanks for the response.
Well, "something is wrong" is the way my program differ from photoshop for example Actually, with lightness = 0 this algorithm dont count my rgb, and it will be good if with lightness = 0 my picture became totally black and lightness = 1 totally white but its not. This program can just increase lightness on my picture, not reduce.
I just anticipate that my sliders will work the same way as photoshop or gimp and I dont know whats wrong.
I assume that algorithm from wiki is perfect for converting HSL to RGB, and I just missed some important step in adjusting these values to my source image.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900