mirror of
https://github.com/starovoid/rxing.git
synced 2026-07-26 04:12:34 +00:00
progress on passing tests
This commit is contained in:
@@ -5,9 +5,11 @@ use crate::{
|
||||
},
|
||||
BitMatrix, Quadrilateral,
|
||||
},
|
||||
point, Point,
|
||||
point, Point, Exceptions,
|
||||
};
|
||||
|
||||
use crate::common::Result;
|
||||
|
||||
use super::{
|
||||
BitMatrixCursorTrait, EdgeTracer, FastEdgeToEdgeCounter, Pattern, RegressionLine,
|
||||
RegressionLineTrait, UpdateMinMax, UpdateMinMaxFloat,
|
||||
@@ -223,7 +225,7 @@ pub fn CenterOfRing(
|
||||
neighbourMask |= 1
|
||||
<< (4.0
|
||||
+ Point::dot(
|
||||
Point::round(Point::bresenhamDirection(cur.p() - center)),
|
||||
Point::floor(Point::bresenhamDirection(cur.p() - center)),
|
||||
point(1.0, 3.0),
|
||||
)) as u32;
|
||||
|
||||
@@ -400,12 +402,27 @@ pub fn FitQadrilateralToPoints(center: Point, points: &mut [Point]) -> Option<Qu
|
||||
points.iter().position(|p| *p == corners[3])?,
|
||||
];
|
||||
|
||||
let lines = [
|
||||
RegressionLine::with_point_slice(&points[corner_positions[0] + 1..corner_positions[1]]),
|
||||
RegressionLine::with_point_slice(&points[corner_positions[1] + 1..corner_positions[2]]),
|
||||
RegressionLine::with_point_slice(&points[corner_positions[2] + 1..corner_positions[3]]),
|
||||
RegressionLine::with_point_slice(&points[corner_positions[3] + 1..points.len()]),
|
||||
let try_get_range = |a:usize, b:usize| -> Option<&[Point]> {
|
||||
if a > b {
|
||||
None
|
||||
}else{
|
||||
Some(&points[a + 1..b])
|
||||
}
|
||||
};
|
||||
|
||||
let lines = [
|
||||
RegressionLine::with_point_slice(try_get_range(corner_positions[0],corner_positions[1])?),
|
||||
RegressionLine::with_point_slice(try_get_range(corner_positions[1],corner_positions[2])?),
|
||||
RegressionLine::with_point_slice(try_get_range(corner_positions[2],corner_positions[3])?),
|
||||
RegressionLine::with_point_slice(try_get_range(corner_positions[3],points.len())?),
|
||||
];
|
||||
|
||||
// let lines = [
|
||||
// RegressionLine::with_point_slice(&points[corner_positions[0] + 1..corner_positions[1]]),
|
||||
// RegressionLine::with_point_slice(&points[corner_positions[1] + 1..corner_positions[2]]),
|
||||
// RegressionLine::with_point_slice(&points[corner_positions[2] + 1..corner_positions[3]]),
|
||||
// RegressionLine::with_point_slice(&points[corner_positions[3] + 1..points.len()]),
|
||||
// ];
|
||||
// std::array lines{RegressionLine{corners[0] + 1, corners[1]}, RegressionLine{corners[1] + 1, corners[2]},
|
||||
// RegressionLine{corners[2] + 1, corners[3]}, RegressionLine{corners[3] + 1, &points.back() + 1}};
|
||||
if lines.iter().any(|line| !line.isValid()) {
|
||||
|
||||
@@ -225,7 +225,7 @@ impl RegressionLineTrait for DMRegressionLine {
|
||||
impl DMRegressionLine {
|
||||
pub fn new(point_1: Point, point_2: Point) -> Self {
|
||||
let mut new = Self::default();
|
||||
RegressionLineTrait::evaluate(&mut new, &[point_1, point_1]);
|
||||
RegressionLineTrait::evaluate(&mut new, &[point_1, point_2]);
|
||||
new
|
||||
}
|
||||
|
||||
|
||||
@@ -128,7 +128,7 @@ impl ECIStringBuilder {
|
||||
|
||||
let ecis = self.list_ecis();
|
||||
|
||||
if ecis.len() <= 1 && (ecis.contains(&Eci::Unknown)) {
|
||||
if ecis.len() == 1 && (ecis.contains(&Eci::Unknown)) {
|
||||
self.has_eci = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
use std::collections::{HashMap, HashSet};
|
||||
|
||||
use crate::common::Result;
|
||||
use crate::qrcode::cpp_port::QrReader;
|
||||
use crate::{
|
||||
aztec::AztecReader, datamatrix::DataMatrixReader, maxicode::MaxiCodeReader,
|
||||
oned::MultiFormatOneDReader, pdf417::PDF417Reader, qrcode::QRCodeReader, BarcodeFormat,
|
||||
@@ -43,6 +44,7 @@ pub struct MultiUseMultiFormatReader {
|
||||
aztec_reader: AztecReader,
|
||||
pdf417_reader: PDF417Reader,
|
||||
maxicode_reader: MaxiCodeReader,
|
||||
cpp_qrcode_reader: QrReader,
|
||||
}
|
||||
|
||||
impl Reader for MultiUseMultiFormatReader {
|
||||
@@ -84,6 +86,7 @@ impl Reader for MultiUseMultiFormatReader {
|
||||
self.aztec_reader.reset();
|
||||
self.pdf417_reader.reset();
|
||||
self.maxicode_reader.reset();
|
||||
self.cpp_qrcode_reader.reset();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -174,7 +177,15 @@ impl MultiUseMultiFormatReader {
|
||||
for possible_format in self.possible_formats.iter() {
|
||||
let res = match possible_format {
|
||||
BarcodeFormat::QR_CODE => {
|
||||
self.qr_code_reader.decode_with_hints(image, &self.hints)
|
||||
let a = self.qr_code_reader.decode_with_hints(image, &self.hints);
|
||||
if a.is_ok() {
|
||||
a
|
||||
}else {
|
||||
self.cpp_qrcode_reader.decode_with_hints(image, &self.hints)
|
||||
}
|
||||
}
|
||||
BarcodeFormat::MICRO_QR_CODE => {
|
||||
self.cpp_qrcode_reader.decode_with_hints(image, &self.hints)
|
||||
}
|
||||
BarcodeFormat::DATA_MATRIX => self
|
||||
.data_matrix_reader
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
use rxing::{qrcode::cpp_port::QrReader, BarcodeFormat};
|
||||
use rxing::{qrcode::cpp_port::QrReader, BarcodeFormat, MultiUseMultiFormatReader};
|
||||
|
||||
mod common;
|
||||
|
||||
@@ -187,7 +187,7 @@ fn cpp_qrcode_black_box2_test_case() {
|
||||
let mut tester = common::AbstractBlackBoxTestCase::new(
|
||||
"test_resources/blackbox/cpp/qrcode-2",
|
||||
// MultiFormatReader::default(),
|
||||
QrReader {},
|
||||
QrReader::default(),
|
||||
BarcodeFormat::QR_CODE,
|
||||
);
|
||||
tester.add_test(45, 47, 0.0);
|
||||
|
||||
Reference in New Issue
Block a user