On Thu, 8 Nov 2001 [EMAIL PROTECTED] wrote:

> Color-LAB - RGB to HSB converting
> =================================
> 
> Hi there,
>       has anyone some script for RGB <-> HSB convertion or knows some link to the 
>specification?
>       I would like to use it in my unfinished Color-LAB script...
>       viz: http://sweb.cz/r-mud/index.r
>       
> Thanks Oldes
> 
> -- 
> To unsubscribe from this list, please send an email to
> [EMAIL PROTECTED] with "unsubscribe" in the 
> subject, without the quotes.
> 
Hi Oldes,

these are not perfect  i.e.  
(t - hsv-rgb rgb-hsv t) is not always 0.0.0
but they might be of some service

rgb-hsv: func [rgb [tuple!]
{From "Computer Graphics Principles and Practice", Foley et.al. 
 pg. 592, Fig. 13.33 tuplized by tomc}  
        /local hsv hue d
][
        hsv: 0.0.0
        hsv/3: maximum maximum rgb/1 rgb/2 rgb/3
        hsv/2: either zero? hsv/3 [0]
        [to-integer 
        ((d: hsv/3 - (minimum minimum rgb/1 rgb/2 rgb/3)) / hsv/3 * 255)]
        either zero? hsv/2
        [       hue: 0 d: 0.0.0.0 d/2: hsv/2 d/3: hsv/3 hsv: d]
        [       either hsv/3 = rgb/1 
                [       hue: rgb/2 - rgb/3 / d] 
                [       either hsv/3 = rgb/2
                        [       hue: rgb/3 - rgb/1 / d + 2]
                        [       hue: rgb/1 - rgb/2 / d + 4]
                ]
                hue: to-integer (hue * 128 / 3)
                if negative? hue [hue: hue + 255]
        ]
        hsv/1: hue
        hsv ; if tuple has fouth place hue is undefined
]

hsv-rgb: func [hsv [tuple!]
{From "Computer Graphics Principles and Practice", Foley et.al. 
 pg. 593, Fig. 13.34, tuplized by tomc}  
        /local rgb f p q t i  s v
][
        rgb: 0.0.0
        either zero? hsv/2
        [       either (length? hsv) > 3
                [rgb/1: hsv/3 rgb/2: hsv/3 rgb/3: hsv/3]
                [ print "error"] ; do something beter here
        ][      hue:  hsv/1 // 255 
                hue:  hue * 3 / 128
                i: to-integer hue
                f: hue - i
                s: hsv/2 / 255
                v: hsv/3 / 255
                p: to-integer (255 * (v * (1 - s)))
                q: to-integer (255 * (v * (1 - (s * f))))
                t: to-integer (255 * (v * (1 - (s * (1 - f)))))
                switch i [
                        0 [rgb/1: hsv/3 rgb/2: t     rgb/3: p]
                        1 [rgb/1: q     rgb/2: hsv/3 rgb/3: p] 
                        2 [rgb/1: p     rgb/2: hsv/3 rgb/3: t]
                        3 [rgb/1: p     rgb/2: q     rgb/3: hsv/3]
                        4 [rgb/1: t     rgb/2: p     rgb/3: hsv/3]
                        5 [rgb/1: hsv/3 rgb/2: p     rgb/3: q]
                ]
        ]
        rgb
]


usage example -- (my very first use view - go easy) 

hsv: 128.128.128
view layout [
        b: box 128.128.128 255x64
        t: text to-string hsv
        below
        across
        h: slider 255x16 128[
                hsv: rgb-hsv to-tuple b/color  
                hsv/1: to-integer (h/data * 255) 
                b/color: hsv-rgb hsv
                t/text: to-string hsv
                ht/text:  hsv/1
                show b show t show ht
        ]
        ht: text "000"
        below
        across
        s: slider 255x16 128[
                hsv: rgb-hsv to-tuple b/color
                hsv/2: to-integer (s/data * 255) 
                b/color: hsv-rgb hsv 
                t/text: to-string hsv
                st/text: to-string hsv/2
                show b show t show st
        ]
        st: text "000"
        below
        across
        v: slider 255x16 128[
                hsv: rgb-hsv to-tuple b/color  
                hsv/3: to-integer (v/data * 255) 
                b/color: hsv-rgb hsv 
                t/text: to-string hsv
                vt/text: to-string hsv/3
                show b show t  show vt
        ]
        vt: text "000"
]

-- 
To unsubscribe from this list, please send an email to
[EMAIL PROTECTED] with "unsubscribe" in the 
subject, without the quotes.

Reply via email to