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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
use super::BarcodeRow;
pub struct BarcodeMatrix {
matrix: Vec<BarcodeRow>,
currentRow: isize,
height: usize,
width: usize,
}
impl BarcodeMatrix {
pub fn new(height: usize, width: usize) -> Self {
let mut matrix = Vec::with_capacity(height);
for _i in 0..height {
matrix.push(BarcodeRow::new((width + 4) * 17 + 1));
}
Self {
matrix,
currentRow: -1,
height,
width: width * 17,
}
}
pub fn set(&mut self, x: usize, y: usize, value: u8) {
self.matrix[y].set(x, value);
}
pub fn startRow(&mut self) {
self.currentRow += 1;
}
pub fn getCurrentRow(&self) -> &BarcodeRow {
&self.matrix[self.currentRow as usize]
}
pub fn getCurrentRowMut(&mut self) -> &mut BarcodeRow {
&mut self.matrix[self.currentRow as usize]
}
pub fn getMatrix(&self) -> Vec<Vec<u8>> {
self.getScaledMatrix(1, 1)
}
pub fn getScaledMatrix(&self, xScale: usize, yScale: usize) -> Vec<Vec<u8>> {
let mut matrixOut = vec![vec![0; self.width * xScale]; self.height * yScale];
let yMax = self.height * yScale;
for i in 0..yMax {
matrixOut[yMax - i - 1] = self.matrix[i / yScale].getScaledRow(xScale);
}
matrixOut
}
}