M: gray blue>> gray>> ;
-: rgba>gray ( rgba -- gray )
+GENERIC: >gray ( color -- gray )
+
+M: object >gray >rgba >gray ;
+
+M: rgba >gray
>rgba-components [
[ 0.3 * ] [ 0.59 * ] [ 0.11 * ] tri* + +
] dip <gray> ;
PRIVATE>
-:: rgba>hsva ( rgba -- hsva )
+GENERIC: >hsva ( color -- hsva )
+
+M: object >hsva >rgba >hsva ;
+
+M:: rgba >hsva ( rgba -- hsva )
rgba >rgba-components :> ( r g b a )
r g b sort-triple :> ( z y x )
x z = x zero? or [ 0 0 x a <hsva> ] [
] if ;
: complimentary-color ( color -- color' )
- dup hsva? [ >rgba rgba>hsva ] unless
+ dup hsva? [ >hsva ] unless
{
[ hue>> 180 + 360 mod ]
[ saturation>> ]
{ $subsections
cmyka
<cmyka>
+ >cmyka
cmyka>gray
- rgba>cmyka
}
{ $see-also "colors" } ;
0.0 1.0 0.1 <range> [| r |
0.0 1.0 0.1 <range> [| g |
0.0 1.0 0.1 <range> [| b |
- r g b 1.0 <rgba> dup rgba>cmyka >rgba
+ r g b 1.0 <rgba> dup >cmyka >rgba
[ >rgba-components 4array ] bi@
[ 0.00000001 ~ ] 2all?
] all?
[ [ yellow>> ] [ black>> ] bi + ] tri
[ 1.0 min 1.0 swap - ] tri@ 1.0 <rgba> ; inline
-: rgba>cmyka ( rgba -- cmyka )
+GENERIC: >cmyka ( color -- cmyka )
+
+M: object >cmyka >rgba >cmyka ;
+
+M: rgba >cmyka
>rgba-components [
[ 1 swap - ] tri@ 3dup min min
[ [ - 0.0 1.0 clamp ] curry tri@ ] keep
] dip <cmyka> ;
-: cmyka>gray ( cmyka -- gray )
+M: cmyka >gray
[
{
[ cyan>> 0.3 * ]
{ $subsections
hsla
<hsla>
- rgba>hsla
+ >hsla
}
{ $see-also "colors" } ;
0.0 1.0 0.1 <range> [| r |
0.0 1.0 0.1 <range> [| g |
0.0 1.0 0.1 <range> [| b |
- r g b 1.0 <rgba> dup rgba>hsla >rgba
+ r g b 1.0 <rgba> dup >hsla >rgba
[ >rgba-components 4array ] bi@
[ 0.00000001 ~ ] 2all?
] all?
] if
] dip <rgba> ; inline
-: rgba>hsla ( rgba -- hsla )
+GENERIC: >hsla ( color -- hsla )
+
+M: object >hsla >rgba >hsla ;
+
+M: rgba >hsla
>rgba-components [| r g b |
r g b min min :> min-c
r g b max max :> max-c
{ $subsections
ryba
<ryba>
- rgba>ryba
+ >ryba
}
{ $see-also "colors" } ;
0.0 1.0 0.1 <range> [| r |
0.0 1.0 0.1 <range> [| g |
0.0 1.0 0.1 <range> [| b |
- r g b 1.0 <rgba> dup rgba>ryba >rgba
+ r g b 1.0 <rgba> dup >ryba >rgba
[ >rgba-components 4array ] bi@
[ 0.00000001 ~ ] 2all?
] all?
[ ryb>rgb ] normalized
] [ alpha>> ] bi <rgba> ;
-: rgba>ryba ( rgba -- ryba )
+GENERIC: >ryba ( color -- ryba )
+
+M: object >ryba >rgba >ryba ;
+
+M: rgba >ryba
>rgba-components [ [ rgb>ryb ] normalized ] [ <ryba> ] bi* ;
{ $subsections
yiqa
<yiqa>
- rgba>yiqa
+ >yiqa
}
{ $see-also "colors" } ;
0.0 1.0 0.1 <range> [| r |
0.0 1.0 0.1 <range> [| g |
0.0 1.0 0.1 <range> [| b |
- r g b 1.0 <rgba> dup rgba>yiqa >rgba
+ r g b 1.0 <rgba> dup >yiqa >rgba
[ >rgba-components 4array ] bi@
[ 0.00000001 ~ ] 2all?
] all?
3tri [ 0.0 1.0 clamp ] tri@
] dip <rgba> ; inline
-:: rgba>yiqa ( rgba -- yiqa )
+GENERIC: >yiqa ( color -- yiqa )
+
+M: object >yiqa >rgba >yiqa ;
+
+M:: rgba >yiqa ( rgba -- yiqa )
rgba >rgba-components :> ( r g b a )
0.30 r * 0.59 g * 0.11 b * + + :> y
r y - :> r-y
{ $subsections
yuva
<yuva>
- rgba>yuva
+ >yuva
}
{ $see-also "colors" } ;
0.0 1.0 0.1 <range> [| r |
0.0 1.0 0.1 <range> [| g |
0.0 1.0 0.1 <range> [| b |
- r g b 1.0 <rgba> dup rgba>yuva >rgba
+ r g b 1.0 <rgba> dup >yuva >rgba
[ >rgba-components 4array ] bi@
[ 0.00000001 ~ ] 2all?
] all?
[ 0.0 1.0 clamp ] tri@
] dip <rgba> ; inline
-:: rgba>yuva ( rgba -- yuva )
+GENERIC: >yuva ( color -- yuva )
+
+M: object >yuva >rgba >yuva ;
+
+M:: rgba >yuva ( rgba -- yuva )
rgba >rgba-components :> ( r g b a )
Wr r * Wg g * Wb b * + + :> y
Umax 1 Wb - / b y - * :> u