colors.lab: implement CIELAB colors.
parent
0f74b77b27
commit
98c731b852
|
@ -0,0 +1 @@
|
|||
John Benediktsson
|
|
@ -0,0 +1,14 @@
|
|||
USING: help.markup help.syntax ;
|
||||
IN: colors.lab
|
||||
|
||||
HELP: laba
|
||||
{ $class-description "The class of CIE 1976 LAB colors with an alpha channel." } ;
|
||||
|
||||
ARTICLE: "colors.lab" "CIE 1976 LAB colors"
|
||||
"The " { $vocab-link "colors.lab" } " vocabulary implements CIE 1976 LAB colors, specifying luminance (in approximately " { $snippet "[0,100]" } "), red/green, and blue/yellow components, together with an alpha channel."
|
||||
{ $subsections
|
||||
laba
|
||||
<laba>
|
||||
>laba
|
||||
}
|
||||
{ $see-also "colors" } ;
|
|
@ -0,0 +1,19 @@
|
|||
! Copyright (C) 2014 John Benediktsson
|
||||
! See http://factorcode.org/license.txt for BSD license
|
||||
|
||||
USING: arrays colors kernel locals math.functions math.ranges
|
||||
sequences tools.test ;
|
||||
|
||||
IN: colors.lab
|
||||
|
||||
{ t } [
|
||||
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 >laba >rgba
|
||||
[ >rgba-components 4array ] bi@
|
||||
[ 0.00001 ~ ] 2all?
|
||||
] all?
|
||||
] all?
|
||||
] all?
|
||||
] unit-test
|
|
@ -0,0 +1,63 @@
|
|||
USING: accessors colors colors.xyz colors.xyz.private kernel
|
||||
locals math math.functions ;
|
||||
|
||||
IN: colors.lab
|
||||
|
||||
TUPLE: laba l a b alpha ;
|
||||
|
||||
C: <laba> laba
|
||||
|
||||
M: laba >rgba >xyza >rgba ;
|
||||
|
||||
M: laba >xyza
|
||||
[
|
||||
[let
|
||||
[ l>> ] [ a>> ] [ b>> ] tri :> ( l a b )
|
||||
l 16 + 116 / :> fy
|
||||
a 500 / fy + :> fx
|
||||
fy b 200 / - :> fz
|
||||
|
||||
fx 3 ^ :> fx3
|
||||
fz 3 ^ :> fz3
|
||||
|
||||
fx3 xyz_epsilon > [
|
||||
fx3
|
||||
] [
|
||||
116 fx * 16 - xyz_kappa /
|
||||
] if :> x
|
||||
|
||||
l xyz_kappa xyz_epsilon * > [
|
||||
l 16 + 116 / 3 ^
|
||||
] [
|
||||
l xyz_kappa /
|
||||
] if :> y
|
||||
|
||||
fz3 xyz_epsilon > [
|
||||
fz3
|
||||
] [
|
||||
116 fz * 16 - xyz_kappa /
|
||||
] if :> z
|
||||
|
||||
x wp_x * y wp_y * z wp_z *
|
||||
]
|
||||
] [ alpha>> ] bi <xyza> ;
|
||||
|
||||
GENERIC: >laba ( color -- laba )
|
||||
|
||||
M: object >laba >rgba >laba ;
|
||||
|
||||
M: rgba >laba >xyza >laba ;
|
||||
|
||||
M: xyza >laba
|
||||
[
|
||||
[let
|
||||
[ x>> wp_x / ] [ y>> wp_y / ] [ z>> wp_z / ] tri
|
||||
[
|
||||
dup xyz_epsilon >
|
||||
[ 1/3 ^ ] [ xyz_kappa * 16 + 116 / ] if
|
||||
] tri@ :> ( fx fy fz )
|
||||
116 fy * 16 -
|
||||
500 fx fy - *
|
||||
200 fy fz - *
|
||||
]
|
||||
] [ alpha>> ] bi <laba> ;
|
|
@ -0,0 +1 @@
|
|||
CIE 1976 LAB colors
|
Loading…
Reference in New Issue