Changeset 2215


Ignore:
Timestamp:
Jan 11, 2013, 2:15:19 PM (7 years ago)
Author:
sam
Message:

color: a reasonably fast RGB to HSV conversion with only three tests.

File:
1 edited

Legend:

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

    r2202 r2215  
    8181
    8282    /*
     83     * Convert RGB to HSV
     84     */
     85    static vec3 RGBToHSV(vec3 src)
     86    {
     87        float offset = 0.f;
     88
     89        if (src.r < src.g)
     90            src = src.grb, offset = -2.f / 6.f;
     91
     92        if (src.g < src.b)
     93            src = src.rbg, offset = -1.f - 4.f * offset;
     94
     95        if (src.r < src.g)
     96            src = src.grb, offset = -2.f / 6.f - offset;
     97
     98        float chroma = src.r - src.b;
     99        return vec3(abs((src.g - src.b) / (6.f * chroma + 1e-40f) + offset),
     100                    chroma / (src.r + 1e-40f),
     101                    src.r);
     102    }
     103
     104    static vec4 RGBToHSV(vec4 src)
     105    {
     106        return vec4(RGBToHSV(src.rgb), src.a);
     107    }
     108
     109    /*
    83110     * Convert linear HSV to linear HSL
    84111     */
Note: See TracChangeset for help on using the changeset viewer.