diff --git a/src/qrcode/decoder/decoder.rs b/src/qrcode/decoder/decoder.rs index f962cc9..98e3403 100644 --- a/src/qrcode/decoder/decoder.rs +++ b/src/qrcode/decoder/decoder.rs @@ -169,7 +169,7 @@ fn decode_bitmatrix_parser_with_hints( // for (DataBlock dataBlock : dataBlocks) { let mut codewordBytes = dataBlock.getCodewords().to_vec(); let numDataCodewords = dataBlock.getNumDataCodewords() as usize; - correctErrors(&mut codewordBytes, numDataCodewords); + correctErrors(&mut codewordBytes, numDataCodewords)?; for i in 0..numDataCodewords { // for (int i = 0; i < numDataCodewords; i++) { resultBytes[resultOffset] = codewordBytes[i]; diff --git a/tests/QRCodeBlackBox1TestCase.rs b/tests/QRCodeBlackBox1TestCase.rs index 0f28c1e..2eaceb8 100644 --- a/tests/QRCodeBlackBox1TestCase.rs +++ b/tests/QRCodeBlackBox1TestCase.rs @@ -37,3 +37,6 @@ fn QRCodeBlackBox1TestCase() { tester.testBlackBox(); } + + +// TEST CASE 15 FAILING AT allignment patter finder! (line 88) FROM detector 486 \ No newline at end of file diff --git a/tests/common/abstract_black_box_test_case.rs b/tests/common/abstract_black_box_test_case.rs index 1919556..b232f68 100644 --- a/tests/common/abstract_black_box_test_case.rs +++ b/tests/common/abstract_black_box_test_case.rs @@ -17,7 +17,8 @@ use std::{ collections::HashMap, fs::{read_dir, read_to_string, File}, - path::{Path, PathBuf}, io::Write, + io::Write, + path::{Path, PathBuf}, }; use rxing::{ @@ -114,7 +115,7 @@ impl AbstractBlackBoxTestCase { let path_search = read_dir(&self.test_base); const possible_extensions: &str = "jpg,jpeg,gif,png,JPG,JPEG,GIF,PNG"; - let paths = path_search + let mut paths = path_search .unwrap() .into_iter() .filter(|r| r.is_ok()) // Get rid of Err variants for Result @@ -122,7 +123,9 @@ impl AbstractBlackBoxTestCase { .filter(|r| r.is_file()) // Filter out non-folders .filter(|r| possible_extensions.contains(r.extension().unwrap().to_str().unwrap())) // .map(|r| r.into_boxed_path()) - .collect(); + .collect::>(); + + paths.sort(); paths } @@ -231,15 +234,16 @@ impl AbstractBlackBoxTestCase { let rotated_image = Self::rotate_image(&image, rotation); let source = BufferedImageLuminanceSource::new(rotated_image); let bitmap = BinaryBitmap::new(Box::new(HybridBinarizer::new(Box::new(source)))); - - // if file_base_name == "09" { - // let mut f = File::create("test_file_output.txt").unwrap(); - // dbg!("dumb"); - // write!(f,"{}", bitmap.getBlackMatrix().unwrap()); - // drop(f); - // Self::rotate_image(&image, rotation).save("test_image.png").unwrap(); - // } - + + #[cfg(test)] + if file_base_name == "13" { + let mut f = File::create("test_file_output.txt").unwrap(); + dbg!("dumb"); + write!(f,"{}", bitmap.getBlackMatrix().unwrap()); + drop(f); + Self::rotate_image(&image, rotation).save("test_image.png").unwrap(); + } + if let Ok(decoded) = self.decode(&bitmap, rotation, &expected_text, &expected_metadata, false) { @@ -497,23 +501,48 @@ impl AbstractBlackBoxTestCase { // break; // } - let radians = degrees.to_radians(); + if degrees == 90.0 { + original.rotate90() + } else if degrees == 180.0 { + original.rotate180() + } else if degrees == 270.0 { + original.rotate270() + } else { + let radians = degrees.to_radians(); - { - use image::DynamicImage; - use image::Luma; - use imageproc::geometric_transformations::*; + { + use image::DynamicImage; + use image::Luma; + use imageproc::geometric_transformations::*; - let i = rotate_about_center( - &original.to_luma8(), - radians, - Interpolation::Nearest, - Luma([u8::MAX/2; 1]), - ); + let i = rotate_about_center( + &original.to_luma8(), + radians, + Interpolation::Nearest, + Luma([u8::MAX / 2; 1]), + ); - DynamicImage::from(i) + DynamicImage::from(i) + } } + // let radians = degrees.to_radians(); + + // { + // use image::DynamicImage; + // use image::Luma; + // use imageproc::geometric_transformations::*; + + // let i = rotate_about_center( + // &original.to_luma8(), + // radians, + // Interpolation::Nearest, + // Luma([u8::MAX / 2; 1]), + // ); + + // DynamicImage::from(i) + // } + // // Transform simply to find out the new bounding box (don't actually run the image through it) // AffineTransform at = new AffineTransform(); // at.rotate(radians, original.getWidth() / 2.0, original.getHeight() / 2.0);