-
Notifications
You must be signed in to change notification settings - Fork 205
/
yuv.factor
54 lines (38 loc) · 990 Bytes
/
yuv.factor
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
! Copyright (C) 2013 John Benediktsson
! See https://factorcode.org/license.txt for BSD license
USING: accessors colors combinators kernel math
math.order ;
IN: colors.yuv
TUPLE: yuva
{ y read-only }
{ u read-only }
{ v read-only }
{ alpha read-only } ;
C: <yuva> yuva
INSTANCE: yuva color
<PRIVATE
CONSTANT: Wr 0.299
CONSTANT: Wb 0.114
CONSTANT: Wg 0.587
CONSTANT: Umax 0.436
CONSTANT: Vmax 0.615
PRIVATE>
M: yuva >rgba
{ [ y>> ] [ u>> ] [ v>> ] [ alpha>> ] } cleave
[| y u v |
y 1 Wr - Vmax / v * +
y
Wb 1 Wb - * Umax Wg * / neg u *
Wr 1 Wr - * Vmax Wg * / neg v * + +
y 1 Wb - Umax / u * +
[ 0.0 1.0 clamp ] tri@
] dip <rgba> ; inline
GENERIC: >yuva ( color -- yuva )
M: object >yuva >rgba >yuva ;
M: yuva >yuva ; inline
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
Vmax 1 Wr - / r y - * :> v
y u v a <yuva> ;