Changeset 2218


Ignore:
Timestamp:
Jan 14, 2013, 9:19:06 AM (7 years ago)
Author:
sam
Message:

color: write the RGB to HSL routine and its associated unit tests.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/lol/image/color.h

    r2217 r2218  
    105105
    106106    /*
     107     * Convert RGB to HSL
     108     */
     109    static vec3 RGBToHSL(vec3 src)
     110    {
     111        float K = 0.f;
     112
     113        if (src.g < src.b)
     114            src = src.rbg, K = -1.f;
     115
     116        if (src.r < src.g)
     117            src = src.grb, K = -2.f / 6.f - K;
     118
     119        float chroma = src.r - min(src.g, src.b);
     120        float luma = src.r + min(src.g, src.b);
     121        return vec3(abs(K + (src.g - src.b) / (6.f * chroma + 1e-20f)),
     122                    chroma / (min(luma, 2.f - luma) + 1e-20f),
     123                    0.5f * luma);
     124    }
     125
     126    static vec4 RGBToHSL(vec4 src)
     127    {
     128        return vec4(RGBToHSL(src.rgb), src.a);
     129    }
     130
     131    /*
    107132     * Convert linear HSV to linear HSL
    108133     */
  • trunk/test/unit/color.cpp

    r2217 r2218  
    102102        }
    103103    }
     104
     105    LOLUNIT_TEST(RGBToHSL)
     106    {
     107        for (int r = 0; r < 20; r++)
     108        for (int g = 0; g < 20; g++)
     109        for (int b = 0; b < 20; b++)
     110        {
     111            vec3 v1 = vec3(r / 20.f, g / 20.f, b / 20.f);
     112            vec3 v2 = Color::RGBToHSL(v1);
     113            vec3 v3 = Color::HSVToHSL(Color::RGBToHSV(v1));
     114
     115            LOLUNIT_ASSERT_DOUBLES_EQUAL(v2.x, v3.x, 0.0001);
     116            LOLUNIT_ASSERT_DOUBLES_EQUAL(v2.y, v3.y, 0.0001);
     117            LOLUNIT_ASSERT_DOUBLES_EQUAL(v2.z, v3.z, 0.0001);
     118        }
     119    }
    104120};
    105121
Note: See TracChangeset for help on using the changeset viewer.