mirror of
https://github.com/starovoid/rxing.git
synced 2026-07-26 12:22:34 +00:00
most qrcode reads pass, some 90 degree rots fail
This commit is contained in:
@@ -290,7 +290,7 @@ impl AlignmentPatternFinder {
|
||||
let centerJ = Self::centerFromEnd(stateCount, j);
|
||||
let centerI = self.crossCheckVertical(
|
||||
i,
|
||||
centerJ.round() as u32,
|
||||
centerJ.floor() as u32,
|
||||
2 * stateCount[1],
|
||||
stateCountTotal,
|
||||
);
|
||||
|
||||
@@ -304,16 +304,16 @@ impl Detector {
|
||||
*/
|
||||
fn calculateModuleSizeOneWay<T: ResultPoint>(&self, pattern: &T, otherPattern: &T) -> f32 {
|
||||
let moduleSizeEst1 = self.sizeOfBlackWhiteBlackRunBothWays(
|
||||
pattern.getX() as u32,
|
||||
pattern.getY() as u32,
|
||||
otherPattern.getX() as u32,
|
||||
otherPattern.getY() as u32,
|
||||
pattern.getX().floor() as u32,
|
||||
pattern.getY().floor() as u32,
|
||||
otherPattern.getX().floor() as u32,
|
||||
otherPattern.getY().floor() as u32,
|
||||
);
|
||||
let moduleSizeEst2 = self.sizeOfBlackWhiteBlackRunBothWays(
|
||||
otherPattern.getX() as u32,
|
||||
otherPattern.getY() as u32,
|
||||
pattern.getX() as u32,
|
||||
pattern.getY() as u32,
|
||||
otherPattern.getX().floor() as u32,
|
||||
otherPattern.getY().floor() as u32,
|
||||
pattern.getX().floor() as u32,
|
||||
pattern.getY().floor() as u32,
|
||||
);
|
||||
if moduleSizeEst1.is_nan() {
|
||||
return moduleSizeEst2 / 7.0;
|
||||
@@ -344,7 +344,7 @@ impl Detector {
|
||||
scale = (self.image.getWidth() as i32 - 1 - fromX as i32) as f32 / (otherToX - fromX as i32) as f32;
|
||||
otherToX = self.image.getWidth() as i32 - 1;
|
||||
}
|
||||
let mut otherToY = fromY as i32 - (toY as i32 - fromY as i32) * scale as i32;
|
||||
let mut otherToY = fromY as i32 - (toY as i32 - fromY as i32) * scale.floor() as i32;
|
||||
|
||||
scale = 1.0;
|
||||
if otherToY < 0 {
|
||||
@@ -354,7 +354,7 @@ impl Detector {
|
||||
scale = (self.image.getHeight() as i32 - 1 - fromY as i32) as f32 / (otherToY - fromY as i32) as f32;
|
||||
otherToY = self.image.getHeight() as i32 - 1;
|
||||
}
|
||||
otherToX = fromX as i32+ (otherToX - fromX as i32) * scale as i32;
|
||||
otherToX = fromX as i32+ (otherToX - fromX as i32) * scale.floor() as i32;
|
||||
|
||||
result += self.sizeOfBlackWhiteBlackRun(fromX as u32, fromY as u32, otherToX as u32, otherToY as u32);
|
||||
|
||||
|
||||
@@ -136,6 +136,7 @@ impl FinderPatternFinder {
|
||||
// of pattern we saw) to be conservative, and also back off by iSkip which
|
||||
// is about to be re-added
|
||||
i += (rowSkip as i32 - stateCount[2] as i32 - iSkip as i32).max(0) as u32;
|
||||
// i += rowSkip - stateCount[2] - iSkip ;
|
||||
j = maxJ - 1;
|
||||
}
|
||||
}
|
||||
@@ -556,16 +557,16 @@ impl FinderPatternFinder {
|
||||
let stateCountTotal =
|
||||
stateCount[0] + stateCount[1] + stateCount[2] + stateCount[3] + stateCount[4];
|
||||
let mut centerJ = Self::centerFromEnd(stateCount, j);
|
||||
let centerI = self.crossCheckVertical(i, centerJ as u32, stateCount[2], stateCountTotal);
|
||||
let centerI = self.crossCheckVertical(i, centerJ.floor() as u32, stateCount[2], stateCountTotal);
|
||||
if !centerI.is_nan() {
|
||||
// Re-cross check
|
||||
centerJ = self.crossCheckHorizontal(
|
||||
centerJ as u32,
|
||||
centerI as u32,
|
||||
centerJ.floor() as u32,
|
||||
centerI.floor() as u32,
|
||||
stateCount[2],
|
||||
stateCountTotal,
|
||||
);
|
||||
if !centerJ.is_nan() && self.crossCheckDiagonal(centerI as u32, centerJ as u32) {
|
||||
if !centerJ.is_nan() && self.crossCheckDiagonal(centerI.floor() as u32, centerJ.floor() as u32) {
|
||||
let estimatedModuleSize = stateCountTotal as f32 / 7.0;
|
||||
let mut found = false;
|
||||
for index in 0..self.possibleCenters.len() {
|
||||
@@ -620,7 +621,7 @@ impl FinderPatternFinder {
|
||||
return (((fnp.getX() - center.getX().abs())
|
||||
- (fnp.getY() - center.getY()).abs())
|
||||
/ 2.0)
|
||||
.round() as u32;
|
||||
.floor() as u32;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user