156 lines
4.9 KiB
Java
156 lines
4.9 KiB
Java
package com.google.zxing.common;
|
|
|
|
import com.google.zxing.LuminanceSource;
|
|
import com.google.zxing.NotFoundException;
|
|
import java.lang.reflect.Array;
|
|
|
|
/* loaded from: classes.dex */
|
|
public final class HybridBinarizer extends GlobalHistogramBinarizer {
|
|
private BitMatrix e;
|
|
|
|
public HybridBinarizer(LuminanceSource luminanceSource) {
|
|
super(luminanceSource);
|
|
}
|
|
|
|
private static int a(int i, int i2, int i3) {
|
|
return i < i2 ? i2 : i > i3 ? i3 : i;
|
|
}
|
|
|
|
@Override // com.google.zxing.common.GlobalHistogramBinarizer, com.google.zxing.Binarizer
|
|
public BitMatrix a() throws NotFoundException {
|
|
BitMatrix bitMatrix = this.e;
|
|
if (bitMatrix != null) {
|
|
return bitMatrix;
|
|
}
|
|
LuminanceSource c = c();
|
|
int c2 = c.c();
|
|
int a = c.a();
|
|
if (c2 < 40 || a < 40) {
|
|
this.e = super.a();
|
|
} else {
|
|
byte[] b = c.b();
|
|
int i = c2 >> 3;
|
|
if ((c2 & 7) != 0) {
|
|
i++;
|
|
}
|
|
int i2 = i;
|
|
int i3 = a >> 3;
|
|
if ((a & 7) != 0) {
|
|
i3++;
|
|
}
|
|
int i4 = i3;
|
|
int[][] a2 = a(b, i2, i4, c2, a);
|
|
BitMatrix bitMatrix2 = new BitMatrix(c2, a);
|
|
a(b, i2, i4, c2, a, a2, bitMatrix2);
|
|
this.e = bitMatrix2;
|
|
}
|
|
return this.e;
|
|
}
|
|
|
|
private static void a(byte[] bArr, int i, int i2, int i3, int i4, int[][] iArr, BitMatrix bitMatrix) {
|
|
int i5 = i4 - 8;
|
|
int i6 = i3 - 8;
|
|
for (int i7 = 0; i7 < i2; i7++) {
|
|
int i8 = i7 << 3;
|
|
int i9 = i8 > i5 ? i5 : i8;
|
|
int a = a(i7, 2, i2 - 3);
|
|
for (int i10 = 0; i10 < i; i10++) {
|
|
int i11 = i10 << 3;
|
|
int i12 = i11 > i6 ? i6 : i11;
|
|
int a2 = a(i10, 2, i - 3);
|
|
int i13 = 0;
|
|
for (int i14 = -2; i14 <= 2; i14++) {
|
|
int[] iArr2 = iArr[a + i14];
|
|
i13 += iArr2[a2 - 2] + iArr2[a2 - 1] + iArr2[a2] + iArr2[a2 + 1] + iArr2[a2 + 2];
|
|
}
|
|
a(bArr, i12, i9, i13 / 25, i3, bitMatrix);
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void a(byte[] bArr, int i, int i2, int i3, int i4, BitMatrix bitMatrix) {
|
|
int i5 = (i2 * i4) + i;
|
|
int i6 = 0;
|
|
while (i6 < 8) {
|
|
for (int i7 = 0; i7 < 8; i7++) {
|
|
if ((bArr[i5 + i7] & 255) <= i3) {
|
|
bitMatrix.c(i + i7, i2 + i6);
|
|
}
|
|
}
|
|
i6++;
|
|
i5 += i4;
|
|
}
|
|
}
|
|
|
|
private static int[][] a(byte[] bArr, int i, int i2, int i3, int i4) {
|
|
int i5 = 8;
|
|
int i6 = i4 - 8;
|
|
int i7 = i3 - 8;
|
|
int[][] iArr = (int[][]) Array.newInstance((Class<?>) int.class, i2, i);
|
|
for (int i8 = 0; i8 < i2; i8++) {
|
|
int i9 = i8 << 3;
|
|
if (i9 > i6) {
|
|
i9 = i6;
|
|
}
|
|
for (int i10 = 0; i10 < i; i10++) {
|
|
int i11 = i10 << 3;
|
|
if (i11 > i7) {
|
|
i11 = i7;
|
|
}
|
|
int i12 = (i9 * i3) + i11;
|
|
int i13 = 0;
|
|
int i14 = 0;
|
|
int i15 = 0;
|
|
int i16 = 255;
|
|
while (i13 < i5) {
|
|
int i17 = i14;
|
|
int i18 = 0;
|
|
while (i18 < i5) {
|
|
int i19 = bArr[i12 + i18] & 255;
|
|
i17 += i19;
|
|
if (i19 < i16) {
|
|
i16 = i19;
|
|
}
|
|
if (i19 > i15) {
|
|
i15 = i19;
|
|
}
|
|
i18++;
|
|
i5 = 8;
|
|
}
|
|
if (i15 - i16 > 24) {
|
|
i13++;
|
|
i12 += i3;
|
|
i5 = 8;
|
|
while (i13 < 8) {
|
|
for (int i20 = 0; i20 < 8; i20++) {
|
|
i17 += bArr[i12 + i20] & 255;
|
|
}
|
|
i13++;
|
|
i12 += i3;
|
|
}
|
|
} else {
|
|
i5 = 8;
|
|
}
|
|
i14 = i17;
|
|
i13++;
|
|
i12 += i3;
|
|
}
|
|
int i21 = i14 >> 6;
|
|
if (i15 - i16 <= 24) {
|
|
i21 = i16 / 2;
|
|
if (i8 > 0 && i10 > 0) {
|
|
int i22 = i8 - 1;
|
|
int i23 = i10 - 1;
|
|
int i24 = ((iArr[i22][i10] + (iArr[i8][i23] * 2)) + iArr[i22][i23]) / 4;
|
|
if (i16 < i24) {
|
|
i21 = i24;
|
|
}
|
|
}
|
|
}
|
|
iArr[i8][i10] = i21;
|
|
}
|
|
}
|
|
return iArr;
|
|
}
|
|
}
|