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
type 'a t =
{ t : 'a
; channels : int
; has_alpha : bool }
let create ~has_alpha ~channels t = {t; channels; has_alpha}
let has_alpha {has_alpha; _} = has_alpha
let channels {channels; _} = channels
let t {t; _} = t
type gray = [`Gray]
type rgb = [`Rgb]
type rgb_packed = [`Rgb_packed]
type yuv = [`Yuv]
type xyz = [`Xyz]
type rgba = [`Rgba]
type any = [`Any]
let gray = create ~has_alpha:false ~channels:1 `Gray
let rgb = create ~has_alpha:false ~channels:3 `Rgb
let yuv = create ~has_alpha:false ~channels:3 `Yuv
let xyz = create ~has_alpha:false ~channels:3 `Xyz
let rgba = create ~has_alpha:false ~channels:4 `Rgba
let rgb_packed = create ~has_alpha:false ~channels:1 `Rgb_packed
let color n = create ~has_alpha:(n = 4) ~channels:n `Any
let[@inline] channels_of_color : type a. a t -> int =
fun {channels; _} -> channels