diff options
author | Akshay <[email protected]> | 2021-04-02 05:46:42 +0100 |
---|---|---|
committer | Akshay <[email protected]> | 2021-04-02 05:47:40 +0100 |
commit | dc902a1cd718770bffcecfa4fffa8142db37a7e6 (patch) | |
tree | bab378dc9cb72868f1839f5e3e13449524c8525c /src/dither.rs | |
parent | 46236d9e2533cc57630548b9a701eb0089cd1293 (diff) |
add rylander dithering, `define` macro, begin work on guides.
Diffstat (limited to 'src/dither.rs')
-rw-r--r-- | src/dither.rs | 66 |
1 files changed, 47 insertions, 19 deletions
diff --git a/src/dither.rs b/src/dither.rs index c19bd6d..99e2839 100644 --- a/src/dither.rs +++ b/src/dither.rs | |||
@@ -1,24 +1,5 @@ | |||
1 | use crate::bitmap::MapPoint; | 1 | use crate::bitmap::MapPoint; |
2 | 2 | ||
3 | // dither intensities (rylander) | ||
4 | // 0: none | ||
5 | // 1: (1, 3) | ||
6 | // 2: (3, 1) | ||
7 | // 3: (3, 3) | ||
8 | // 4: (1, 1) | ||
9 | // 5: (1, 2) | ||
10 | // 6: (3, 0) | ||
11 | // 7: (3, 2) | ||
12 | // 8: (1, 0) | ||
13 | // 9: (0, 3) | ||
14 | // 10: (2, 1) | ||
15 | // 11: (2, 3) | ||
16 | // 12: (0, 1) | ||
17 | // 13: (0, 2) | ||
18 | // 14: (2, 0) | ||
19 | // 15: (2, 2) | ||
20 | // 16: (0, 0) | ||
21 | |||
22 | // dither intensities (bayers) | 3 | // dither intensities (bayers) |
23 | // 0: none | 4 | // 0: none |
24 | // 1: (0, 0) | 5 | // 1: (0, 0) |
@@ -65,3 +46,50 @@ pub fn bayer(level: u8, pt: MapPoint) -> bool { | |||
65 | } | 46 | } |
66 | } | 47 | } |
67 | } | 48 | } |
49 | |||
50 | // dither intensities (rylander) | ||
51 | // 0: none | ||
52 | // 1: (1, 3) | ||
53 | // 2: (3, 1) | ||
54 | // 3: (3, 3) | ||
55 | // 4: (1, 1) | ||
56 | // 5: (1, 2) | ||
57 | // 6: (3, 0) | ||
58 | // 7: (3, 2) | ||
59 | // 8: (1, 0) | ||
60 | // 9: (0, 3) | ||
61 | // 10: (2, 1) | ||
62 | // 11: (2, 3) | ||
63 | // 12: (0, 1) | ||
64 | // 13: (0, 2) | ||
65 | // 14: (2, 0) | ||
66 | // 15: (2, 2) | ||
67 | // 16: (0, 0) | ||
68 | |||
69 | pub fn rylander(level: u8, pt: MapPoint) -> bool { | ||
70 | if level == 0 { | ||
71 | false | ||
72 | } else { | ||
73 | let MapPoint { x, y } = pt; | ||
74 | let r = (x % 4, y % 4); | ||
75 | match level { | ||
76 | 01 => r == (1, 3) || rylander(00, pt), | ||
77 | 02 => r == (3, 1) || rylander(01, pt), | ||
78 | 03 => r == (3, 3) || rylander(02, pt), | ||
79 | 04 => r == (1, 1) || rylander(03, pt), | ||
80 | 05 => r == (1, 2) || rylander(04, pt), | ||
81 | 06 => r == (3, 0) || rylander(05, pt), | ||
82 | 07 => r == (3, 2) || rylander(06, pt), | ||
83 | 08 => r == (1, 0) || rylander(07, pt), | ||
84 | 09 => r == (0, 3) || rylander(08, pt), | ||
85 | 10 => r == (2, 1) || rylander(09, pt), | ||
86 | 11 => r == (2, 3) || rylander(10, pt), | ||
87 | 12 => r == (0, 1) || rylander(11, pt), | ||
88 | 13 => r == (0, 2) || rylander(12, pt), | ||
89 | 14 => r == (2, 0) || rylander(13, pt), | ||
90 | 15 => r == (2, 2) || rylander(14, pt), | ||
91 | 16 => r == (0, 0) || rylander(15, pt), | ||
92 | _ => panic!("Invalid dither level!"), | ||
93 | } | ||
94 | } | ||
95 | } | ||