]> gitweb.factorcode.org Git - factor.git/blob - basis/colors/yuv/yuv.factor
factor: trim using lists
[factor.git] / basis / colors / yuv / yuv.factor
1 ! Copyright (C) 2013 John Benediktsson
2 ! See http://factorcode.org/license.txt for BSD license
3
4 USING: accessors colors combinators kernel math
5 math.order ;
6
7 IN: colors.yuv
8
9 TUPLE: yuva
10 { y read-only }
11 { u read-only }
12 { v read-only }
13 { alpha read-only } ;
14
15 C: <yuva> yuva
16
17 INSTANCE: yuva color
18
19 <PRIVATE
20
21 CONSTANT: Wr 0.299
22 CONSTANT: Wb 0.114
23 CONSTANT: Wg 0.587
24 CONSTANT: Umax 0.436
25 CONSTANT: Vmax 0.615
26
27 PRIVATE>
28
29 M: yuva >rgba
30     { [ y>> ] [ u>> ] [ v>> ] [ alpha>> ] } cleave
31     [| y u v |
32         y 1 Wr - Vmax / v * +
33
34         y
35         Wb 1 Wb - * Umax Wg * / neg u *
36         Wr 1 Wr - * Vmax Wg * / neg v * + +
37
38         y 1 Wb - Umax / u * +
39
40         [ 0.0 1.0 clamp ] tri@
41     ] dip <rgba> ; inline
42
43 GENERIC: >yuva ( color -- yuva )
44
45 M: object >yuva >rgba >yuva ;
46
47 M: yuva >yuva ; inline
48
49 M:: rgba >yuva ( rgba -- yuva )
50     rgba >rgba-components :> ( r g b a )
51     Wr r * Wg g * Wb b * + + :> y
52     Umax 1 Wb - / b y - * :> u
53     Vmax 1 Wr - / r y - * :> v
54     y u v a <yuva> ;