~ubuntu-branches/ubuntu/utopic/gridengine/utopic

« back to all changes in this revision

Viewing changes to source/3rdparty/qmon/Xmt310/Xmt/RGBtoHSL.c

  • Committer: Bazaar Package Importer
  • Author(s): Mark Hymers
  • Date: 2008-06-25 22:36:13 UTC
  • Revision ID: james.westby@ubuntu.com-20080625223613-tvd9xlhuoct9kyhm
Tags: upstream-6.2~beta2
ImportĀ upstreamĀ versionĀ 6.2~beta2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* 
 
2
 * Motif Tools Library, Version 3.1
 
3
 * $Id$
 
4
 * 
 
5
 * Written by David Flanagan.
 
6
 * Copyright (c) 1992-2001 by David Flanagan.
 
7
 * All Rights Reserved.  See the file COPYRIGHT for details.
 
8
 * This is open source software.  See the file LICENSE for details.
 
9
 * There is no warranty for this software.  See NO_WARRANTY for details.
 
10
 *
 
11
 * $Log$
 
12
 * Revision 1.1.1.1  2001/07/18 11:06:03  root
 
13
 * Initial checkin.
 
14
 *
 
15
 * Revision 1.2  2001/06/12 16:25:28  andre
 
16
 * *** empty log message ***
 
17
 *
 
18
 *
 
19
 */
 
20
 
 
21
#include <Xmt/Xmt.h>
 
22
 
 
23
/*
 
24
 * RGB <--> HSL conversions were modified from code with the
 
25
 * following attributions;
 
26
 *
 
27
 *    A Fast HSL-to-RGB Transform
 
28
 *    by Ken Fishkin, Pixar Inc., January 1989.
 
29
 *    from "Graphics Gems", Academic Press, 1990
 
30
 */
 
31
 
 
32
#define MIN(a,b)        (((a)<(b))?(a):(b))
 
33
#define MAX(a,b)        (((a)>(b))?(a):(b))
 
34
 
 
35
#if NeedFunctionPrototypes
 
36
void XmtRGBToHSL(unsigned r, unsigned g, unsigned b,
 
37
                 unsigned *h, unsigned *s, unsigned *l)
 
38
#else
 
39
void XmtRGBToHSL(r, g, b, h, s, l)
 
40
unsigned int r;
 
41
unsigned int g;
 
42
unsigned int b;
 
43
unsigned int *h;
 
44
unsigned int *s;
 
45
unsigned int *l;
 
46
#endif
 
47
{
 
48
    unsigned int v, m, vm, r2, g2, b2;
 
49
    unsigned int h2, s2, l2;
 
50
 
 
51
    h2 = s2 = l2 = 0;
 
52
 
 
53
    v = MAX(r,g);
 
54
    v = MAX(v,b);
 
55
    m = MIN(r,g);
 
56
    m = MIN(m,b);
 
57
 
 
58
    if ((l2 = (m + v)/2) == 0) goto done;
 
59
    if ((s2 = vm = (v - m)) == 0) goto done;
 
60
    else s2 = (s2 << 16) / ((l2 < 32768) ? (v+m) : (131072 - v - m));
 
61
 
 
62
    r2 = ((((v-r) << 16) / vm) * 60) >> 16;
 
63
    g2 = ((((v-g) << 16) / vm) * 60) >> 16;
 
64
    b2 = ((((v-b) << 16) / vm) * 60) >> 16;
 
65
 
 
66
    if (r == v)
 
67
        h2 = (g == m ? 300 + b2 : 60 - g2);
 
68
    else if (g == v)
 
69
        h2 = (b == m ? 60 + r2 : 180 - b2);
 
70
    else
 
71
        h2 = (r == m ? 180 + g2 : 300 - r2);
 
72
 
 
73
 done:
 
74
    *h = h2;
 
75
    *s = (s2 * 100) >> 16;
 
76
    *l = (l2 * 100) >> 16;
 
77
}