aboutsummaryrefslogtreecommitdiff
path: root/src/dither.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/dither.rs')
-rw-r--r--src/dither.rs66
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 @@
1use crate::bitmap::MapPoint; 1use 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
69pub 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}