no red lines in detector common

This commit is contained in:
Henry Schimke
2022-08-15 15:32:57 -05:00
parent a5e6fe77e4
commit a360b412a5

View File

@@ -10,7 +10,8 @@ pub struct MathUtils {
impl MathUtils { impl MathUtils {
fn new() -> MathUtils { fn new() -> Self {
Self{}
} }
/** /**
@@ -58,7 +59,7 @@ impl MathUtils {
*/ */
pub fn sum( array: &Vec<i32>) -> i32 { pub fn sum( array: &Vec<i32>) -> i32 {
let mut count: i32 = 0; let mut count: i32 = 0;
for let a: i32 in array { for a in array {
count += a; count += a;
} }
return count; return count;
@@ -79,13 +80,13 @@ const MAX_MODULES: i32 = 32;
#[deprecated] #[deprecated]
pub struct MonochromeRectangleDetector { pub struct MonochromeRectangleDetector {
let image: BitMatrix; image: BitMatrix
} }
impl MonochromeRectangleDetector { impl MonochromeRectangleDetector {
pub fn new( image: &BitMatrix) -> MonochromeRectangleDetector { pub fn new( image: &BitMatrix) -> Self {
let .image = image; Self{ image };
} }
/** /**
@@ -119,8 +120,7 @@ impl MonochromeRectangleDetector {
bottom = point_d.get_y() as i32 + 1; bottom = point_d.get_y() as i32 + 1;
// Go try to find point A again with better information -- might have been off at first. // Go try to find point A again with better information -- might have been off at first.
point_a = self.find_corner_from_center(half_width, 0, left, right, half_height, -delta_y, top, bottom, half_width / 4); point_a = self.find_corner_from_center(half_width, 0, left, right, half_height, -delta_y, top, bottom, half_width / 4);
return Ok( : vec![ResultPoint; 4] = vec![point_a, point_b, point_c, point_d, ] return Ok( vec![point_a, point_b, point_c, point_d, ]);
);
} }
/** /**
@@ -141,10 +141,11 @@ impl MonochromeRectangleDetector {
* @return a {@link ResultPoint} encapsulating the corner that was found * @return a {@link ResultPoint} encapsulating the corner that was found
* @throws NotFoundException if such a point cannot be found * @throws NotFoundException if such a point cannot be found
*/ */
fn find_corner_from_center(&self, center_x: i32, delta_x: i32, left: i32, right: i32, center_y: i32, delta_y: i32, top: i32, bottom: i32, max_white_run: i32) -> /* throws NotFoundException */Result<ResultPoint, Rc<Exception>> { fn find_corner_from_center(&self, center_x: i32, delta_x: i32, left: i32, right: i32, center_y: i32, delta_y: i32, top: i32, bottom: i32, max_white_run: i32) -> Result<ResultPoint, NotFoundException> {
let last_range: Vec<i32> = null; let last_range: Vec<i32> = null;
{ {
let mut y: i32 = center_y, let mut x: i32 = center_x; let mut y: i32 = center_y;
let mut x: i32 = center_x;
while y < bottom && y >= top && x < right && x >= left { while y < bottom && y >= top && x < right && x >= left {
{ {
let mut range: Vec<i32>; let mut range: Vec<i32>;
@@ -157,7 +158,7 @@ impl MonochromeRectangleDetector {
} }
if range == null { if range == null {
if last_range == null { if last_range == null {
throw NotFoundException::get_not_found_instance(); return Err( NotFoundException::get_not_found_instance());
} }
// lastRange was found // lastRange was found
if delta_x == 0 { if delta_x == 0 {
@@ -190,7 +191,7 @@ impl MonochromeRectangleDetector {
} }
} }
throw NotFoundException::get_not_found_instance(); return Err( NotFoundException::get_not_found_instance());
} }
/** /**
@@ -218,7 +219,9 @@ impl MonochromeRectangleDetector {
let white_run_start: i32 = start; let white_run_start: i32 = start;
loop { { loop { {
start -= 1; start -= 1;
}if !(start >= min_dim && !( if horizontal { self.image.get(start, fixed_dimension) } else { self.image.get(fixed_dimension, start) })) break;} }if !(start >= min_dim && !( if horizontal { self.image.get(start, fixed_dimension) } else { self.image.get(fixed_dimension, start) })) {
break;
} }
let white_run_size: i32 = white_run_start - start; let white_run_size: i32 = white_run_start - start;
if start < min_dim || white_run_size > max_white_run { if start < min_dim || white_run_size > max_white_run {
start = white_run_start; start = white_run_start;
@@ -236,7 +239,7 @@ impl MonochromeRectangleDetector {
let white_run_start: i32 = end; let white_run_start: i32 = end;
loop { { loop { {
end += 1; end += 1;
}if !(end < max_dim && !( if horizontal { self.image.get(end, fixed_dimension) } else { self.image.get(fixed_dimension, end) })) break;} }if !(end < max_dim && !( if horizontal { self.image.get(end, fixed_dimension) } else { self.image.get(fixed_dimension, end) })) {break;}}
let white_run_size: i32 = end - white_run_start; let white_run_size: i32 = end - white_run_start;
if end >= max_dim || white_run_size > max_white_run { if end >= max_dim || white_run_size > max_white_run {
end = white_run_start; end = white_run_start;
@@ -245,7 +248,7 @@ impl MonochromeRectangleDetector {
} }
} }
end -= 1; end -= 1;
return if end > start { : vec![i32; 2] = vec![start, end, ] return if end > start { vec![start, end, ]
} else { null }; } else { null };
} }
} }
@@ -267,24 +270,24 @@ const INIT_SIZE: i32 = 10;
const CORR: i32 = 1; const CORR: i32 = 1;
pub struct WhiteRectangleDetector { pub struct WhiteRectangleDetector {
let image: BitMatrix; image: BitMatrix,
let mut height: i32; height: i32,
let mut width: i32; width: i32,
let left_init: i32; left_init: i32,
let right_init: i32; right_init: i32,
let down_init: i32; down_init: i32,
let up_init: i32; up_init: i32
} }
impl WhiteRectangleDetector { impl WhiteRectangleDetector {
pub fn new( image: &BitMatrix) -> WhiteRectangleDetector throws NotFoundException { pub fn new( image: &BitMatrix) -> Result<Self, NotFoundException> {
this(image, INIT_SIZE, image.get_width() / 2, image.get_height() / 2); this(image, INIT_SIZE, image.get_width() / 2, image.get_height() / 2);
} }
@@ -295,18 +298,20 @@ impl WhiteRectangleDetector {
* @param y y position of search center * @param y y position of search center
* @throws NotFoundException if image is too small to accommodate {@code initSize} * @throws NotFoundException if image is too small to accommodate {@code initSize}
*/ */
pub fn new( image: &BitMatrix, init_size: i32, x: i32, y: i32) -> WhiteRectangleDetector throws NotFoundException { pub fn new( image: &BitMatrix, init_size: i32, x: i32, y: i32) -> Result<Self,NotFoundException> {
let .image = image; let mut new_wrd : Self;
height = image.get_height(); new_wrd .image = image;
width = image.get_width(); new_wrd.height = image.get_height();
new_wrd.width = image.get_width();
let halfsize: i32 = init_size / 2; let halfsize: i32 = init_size / 2;
left_init = x - halfsize; new_wrd.left_init = x - halfsize;
right_init = x + halfsize; new_wrd.right_init = x + halfsize;
up_init = y - halfsize; new_wrd.up_init = y - halfsize;
down_init = y + halfsize; new_wrd.down_init = y + halfsize;
if up_init < 0 || left_init < 0 || down_init >= height || right_init >= width { if up_init < 0 || left_init < 0 || down_init >= height || right_init >= width {
throw NotFoundException::get_not_found_instance(); return Err( NotFoundException::get_not_found_instance());
} }
Ok(new_wrd)
} }
/** /**
@@ -323,7 +328,7 @@ impl WhiteRectangleDetector {
* leftmost and the third, the rightmost * leftmost and the third, the rightmost
* @throws NotFoundException if no Data Matrix Code can be found * @throws NotFoundException if no Data Matrix Code can be found
*/ */
pub fn detect(&self) -> /* throws NotFoundException */Result<Vec<ResultPoint>, Rc<Exception>> { pub fn detect(&self) -> Result<Vec<ResultPoint>, NotFoundException> {
let mut left: i32 = self.left_init; let mut left: i32 = self.left_init;
let mut right: i32 = self.right_init; let mut right: i32 = self.right_init;
let mut up: i32 = self.up_init; let mut up: i32 = self.up_init;
@@ -423,7 +428,7 @@ impl WhiteRectangleDetector {
} }
if z == null { if z == null {
throw NotFoundException::get_not_found_instance(); return Err( NotFoundException::get_not_found_instance());
} }
let mut t: ResultPoint = null; let mut t: ResultPoint = null;
//go down right //go down right
@@ -438,7 +443,7 @@ impl WhiteRectangleDetector {
} }
if t == null { if t == null {
throw NotFoundException::get_not_found_instance(); return Err( NotFoundException::get_not_found_instance());
} }
let mut x: ResultPoint = null; let mut x: ResultPoint = null;
//go down left //go down left
@@ -453,7 +458,7 @@ impl WhiteRectangleDetector {
} }
if x == null { if x == null {
throw NotFoundException::get_not_found_instance(); return Err( NotFoundException::get_not_found_instance());
} }
let mut y: ResultPoint = null; let mut y: ResultPoint = null;
//go up left //go up left
@@ -468,11 +473,11 @@ impl WhiteRectangleDetector {
} }
if y == null { if y == null {
throw NotFoundException::get_not_found_instance(); return Err( NotFoundException::get_not_found_instance());
} }
return Ok(self.center_edges(y, z, x, t)); return Ok(self.center_edges(y, z, x, t));
} else { } else {
throw NotFoundException::get_not_found_instance(); return Err( NotFoundException::get_not_found_instance());
} }
} }
@@ -526,10 +531,10 @@ impl WhiteRectangleDetector {
let ti: f32 = t.get_x(); let ti: f32 = t.get_x();
let tj: f32 = t.get_y(); let tj: f32 = t.get_y();
if yi < self.width / 2.0f { if yi < self.width / 2.0f {
return : vec![ResultPoint; 4] = vec![ResultPoint::new(ti - CORR, tj + CORR), ResultPoint::new(zi + CORR, zj + CORR), ResultPoint::new(xi - CORR, xj - CORR), ResultPoint::new(yi + CORR, yj - CORR), ] return vec![ResultPoint::new(ti - CORR, tj + CORR), ResultPoint::new(zi + CORR, zj + CORR), ResultPoint::new(xi - CORR, xj - CORR), ResultPoint::new(yi + CORR, yj - CORR), ]
; ;
} else { } else {
return : vec![ResultPoint; 4] = vec![ResultPoint::new(ti + CORR, tj + CORR), ResultPoint::new(zi + CORR, zj - CORR), ResultPoint::new(xi - CORR, xj + CORR), ResultPoint::new(yi - CORR, yj - CORR), ] return vec![ResultPoint::new(ti + CORR, tj + CORR), ResultPoint::new(zi + CORR, zj - CORR), ResultPoint::new(xi - CORR, xj + CORR), ResultPoint::new(yi - CORR, yj - CORR), ]
; ;
} }
} }