most qrcode reads pass, some 90 degree rots fail

This commit is contained in:
Henry Schimke
2022-10-13 17:37:45 -05:00
parent 7395bb2c29
commit c236cbfd57
6 changed files with 21 additions and 21 deletions

View File

@@ -109,7 +109,6 @@ impl BufferedImageLuminanceSource {
if (alpha & 0xFF) == 0 {
// white, so we know its luminance is 255
raster.put_pixel(x, y, Luma([0xFF]))
// buffer[x] = 0xFF;
} else {
// .299R + 0.587G + 0.114B (YUV/YIQ for PAL and NTSC),
// (306*R) >> 10 is approximately equal to R*0.299, and so on.
@@ -117,9 +116,9 @@ impl BufferedImageLuminanceSource {
raster.put_pixel(
x,
y,
Luma([((306 * (red as u32)
+ 601 * (green as u32)
+ 117 * (blue as u32)
Luma([((306 * (red as u64)
+ 601 * (green as u64)
+ 117 * (blue as u64)
+ 0x200)
>> 10) as u8]),
);

View File

@@ -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,
);

View File

@@ -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);

View File

@@ -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;
}
}
}