Changeset 2217 for trunk/src


Ignore:
Timestamp:
Jan 13, 2013, 11:44:30 PM (8 years ago)
Author:
sam
Message:

color: optimise RGB to HSV conversion routine using my latest findings,
and add a simple unit test function.

File:
1 edited

Legend:

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

    r2216 r2217  
    8585    static vec3 RGBToHSV(vec3 src)
    8686    {
    87         float offset = 0.f;
     87        float K = 0.f;
     88
     89        if (src.g < src.b)
     90            src = src.rbg, K = -1.f;
    8891
    8992        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),
     93            src = src.grb, K = -2.f / 6.f - K;
     94
     95        float chroma = src.r - min(src.g, src.b);
     96        return vec3(abs(K + (src.g - src.b) / (6.f * chroma + 1e-20f)),
     97                    chroma / (src.r + 1e-20f),
    10198                    src.r);
    10299    }
Note: See TracChangeset for help on using the changeset viewer.