All pastes #24471 Raw Edit

Untitled

public text v1 · immutable
#24471 ·published 2005-10-02 21:54 UTC
rendered paste body
static void
ewl_spectrum_rgb_from_hsv(Ewl_Spectrum *sp)
{
        DENTER_FUNCTION(DLEVEL_STABLE);
        DCHECK_PARAM_PTR("sp", sp);

        if (sp->hsv.s == 0)
        {
                unsigned int i;
                i = ((sp->hsv.v / 100.0) * 255.0) + 0.5;

                sp->rgb.r = i;
                sp->rgb.g = i;
                sp->rgb.b = i;
        }
        else
        {
                double h, s, v, f, p, q, t, vs, vsf;
                int i;

                if (sp->hsv.h == 360) sp->hsv.h = 0;
                h = sp->hsv.h / 60.0;

                i = h;
                f = h - (double)i;

                v = sp->hsv.v / 100.0;
                s = sp->hsv.s / 100.0;

                v *= 255.0;
                vs = v * s;
                vsf = vs * f;

                p = v - vs;
                q = v - vsf;
                t = v - vs + vsf;

                s *= 255.0;

printf("i%d v%f p%f q%f t%f\n", i, v, p, q, t);

                /* make sure these truncate the right way */
                v += 0.5;
                s += 0.5;
                p += 0.5;
                q += 0.5;
                t += 0.5;

                switch(i)
                {
                        case 0:
                                sp->rgb.r = v;
                                sp->rgb.g = t;
                                sp->rgb.b = p;
                                break;

                        case 1:
                                sp->rgb.r = q;
                                sp->rgb.g = v;
                                sp->rgb.b = p;
                                break;

                        case 2:
                                sp->rgb.r = p;
                                sp->rgb.g = v;
                                sp->rgb.b = t;
                                break;

                        case 3:
                                sp->rgb.r = p;
                                sp->rgb.g = q;
                                sp->rgb.b = v;
                                break;

                        case 4:
                                sp->rgb.r = t;
                                sp->rgb.g = p;
                                sp->rgb.b = v;
                                break;

                        case 5:
                                sp->rgb.r = v;
                                sp->rgb.g = p;
                                sp->rgb.b = q;
                                break;
                }
        }

        DLEAVE_FUNCTION(DLEVEL_STABLE);
}