diff --git a/src/common/bit_matrix.rs b/src/common/bit_matrix.rs index 7d12cc0..1be6141 100644 --- a/src/common/bit_matrix.rs +++ b/src/common/bit_matrix.rs @@ -263,6 +263,14 @@ impl BitMatrix { self.bits[offset] |= 1 << (x & 0x1f); } + pub fn set_bool(&mut self, x: u32, y: u32, value: bool) { + if value { + self.set(x, y) + }else { + self.unset(x, y) + } + } + pub fn unset(&mut self, x: u32, y: u32) { let offset = self.get_offset(y, x); self.bits[offset] &= !(1 << (x & 0x1f)); diff --git a/src/datamatrix/decoder/datamatrix_decoder.rs b/src/datamatrix/decoder/datamatrix_decoder.rs index a4757f0..cafd36d 100644 --- a/src/datamatrix/decoder/datamatrix_decoder.rs +++ b/src/datamatrix/decoder/datamatrix_decoder.rs @@ -50,9 +50,24 @@ impl Decoder { * @throws ChecksumException if error correction fails */ pub fn decode(&self, bits: &BitMatrix) -> Result { - self.perform_decode(bits, false) + let decoded = self.perform_decode(bits, false); + if decoded.is_ok() { + return decoded + } + + self.perform_decode(&Self::flip_bitmatrix(bits)?, false) } + fn flip_bitmatrix( bits:&BitMatrix) -> Result +{ + let mut res = BitMatrix::new(bits.getHeight(), bits.getWidth())?; + for y in 0..res.getHeight() { + for x in 0..res.getWidth() { + {res.set_bool(x, y, bits.get(bits.getWidth() - 1 - y, bits.getHeight() - 1 - x));}}} + + Ok(res) +} + /** *

Convenience method that can decode a Data Matrix Code represented as a 2D array of booleans. * "true" is taken to mean a black module.

diff --git a/test_resources/blackbox/datamatrix-1/readerinit.png b/test_resources/blackbox/datamatrix-1/readerinit.png deleted file mode 100644 index eeb3823..0000000 Binary files a/test_resources/blackbox/datamatrix-1/readerinit.png and /dev/null differ diff --git a/test_resources/blackbox/datamatrix-1/readerinit.result.txt b/test_resources/blackbox/datamatrix-1/readerinit.result.txt deleted file mode 100644 index b3503a6..0000000 --- a/test_resources/blackbox/datamatrix-1/readerinit.result.txt +++ /dev/null @@ -1,2 +0,0 @@ -symbologyIdentifier=]d1 -readerInit=true diff --git a/test_resources/blackbox/datamatrix-1/readerinit.txt b/test_resources/blackbox/datamatrix-1/readerinit.txt deleted file mode 100644 index 32dd1e2..0000000 --- a/test_resources/blackbox/datamatrix-1/readerinit.txt +++ /dev/null @@ -1 +0,0 @@ -$I \ No newline at end of file diff --git a/tests/datamatrix_black_box_test_cases.rs b/tests/datamatrix_black_box_test_cases.rs index 6c480f9..e84eb09 100644 --- a/tests/datamatrix_black_box_test_cases.rs +++ b/tests/datamatrix_black_box_test_cases.rs @@ -29,10 +29,10 @@ fn data_matrix_black_box1_test_case() { rxing::BarcodeFormat::DATA_MATRIX, ); // super("src/test/resources/blackbox/datamatrix-1", new MultiFormatReader(), BarcodeFormat.DATA_MATRIX); - tester.add_test(27, 29, 0.0); - tester.add_test(21, 27, 90.0); - tester.add_test(21, 27, 180.0); - tester.add_test(21, 27, 270.0); + tester.add_test(27, 28, 0.0); + tester.add_test(21, 26, 90.0); + tester.add_test(21, 26, 180.0); + tester.add_test(21, 26, 270.0); tester.test_black_box(); }