146 lines
3.9 KiB
Java
146 lines
3.9 KiB
Java
package com.google.zxing.common;
|
|
|
|
import com.google.zxing.Binarizer;
|
|
import com.google.zxing.LuminanceSource;
|
|
import com.google.zxing.NotFoundException;
|
|
|
|
/* loaded from: classes.dex */
|
|
public class GlobalHistogramBinarizer extends Binarizer {
|
|
private static final byte[] d = new byte[0];
|
|
private byte[] b;
|
|
private final int[] c;
|
|
|
|
public GlobalHistogramBinarizer(LuminanceSource luminanceSource) {
|
|
super(luminanceSource);
|
|
this.b = d;
|
|
this.c = new int[32];
|
|
}
|
|
|
|
@Override // com.google.zxing.Binarizer
|
|
public BitArray a(int i, BitArray bitArray) throws NotFoundException {
|
|
LuminanceSource c = c();
|
|
int c2 = c.c();
|
|
if (bitArray == null || bitArray.h() < c2) {
|
|
bitArray = new BitArray(c2);
|
|
} else {
|
|
bitArray.a();
|
|
}
|
|
a(c2);
|
|
byte[] a = c.a(i, this.b);
|
|
int[] iArr = this.c;
|
|
for (int i2 = 0; i2 < c2; i2++) {
|
|
int i3 = (a[i2] & 255) >> 3;
|
|
iArr[i3] = iArr[i3] + 1;
|
|
}
|
|
int a2 = a(iArr);
|
|
if (c2 < 3) {
|
|
for (int i4 = 0; i4 < c2; i4++) {
|
|
if ((a[i4] & 255) < a2) {
|
|
bitArray.d(i4);
|
|
}
|
|
}
|
|
} else {
|
|
int i5 = a[0] & 255;
|
|
int i6 = a[1] & 255;
|
|
int i7 = i5;
|
|
int i8 = 1;
|
|
while (i8 < c2 - 1) {
|
|
int i9 = i8 + 1;
|
|
int i10 = a[i9] & 255;
|
|
if ((((i6 << 2) - i7) - i10) / 2 < a2) {
|
|
bitArray.d(i8);
|
|
}
|
|
i7 = i6;
|
|
i8 = i9;
|
|
i6 = i10;
|
|
}
|
|
}
|
|
return bitArray;
|
|
}
|
|
|
|
@Override // com.google.zxing.Binarizer
|
|
public BitMatrix a() throws NotFoundException {
|
|
LuminanceSource c = c();
|
|
int c2 = c.c();
|
|
int a = c.a();
|
|
BitMatrix bitMatrix = new BitMatrix(c2, a);
|
|
a(c2);
|
|
int[] iArr = this.c;
|
|
for (int i = 1; i < 5; i++) {
|
|
byte[] a2 = c.a((a * i) / 5, this.b);
|
|
int i2 = (c2 << 2) / 5;
|
|
for (int i3 = c2 / 5; i3 < i2; i3++) {
|
|
int i4 = (a2[i3] & 255) >> 3;
|
|
iArr[i4] = iArr[i4] + 1;
|
|
}
|
|
}
|
|
int a3 = a(iArr);
|
|
byte[] b = c.b();
|
|
for (int i5 = 0; i5 < a; i5++) {
|
|
int i6 = i5 * c2;
|
|
for (int i7 = 0; i7 < c2; i7++) {
|
|
if ((b[i6 + i7] & 255) < a3) {
|
|
bitMatrix.c(i7, i5);
|
|
}
|
|
}
|
|
}
|
|
return bitMatrix;
|
|
}
|
|
|
|
private void a(int i) {
|
|
if (this.b.length < i) {
|
|
this.b = new byte[i];
|
|
}
|
|
for (int i2 = 0; i2 < 32; i2++) {
|
|
this.c[i2] = 0;
|
|
}
|
|
}
|
|
|
|
private static int a(int[] iArr) throws NotFoundException {
|
|
int length = iArr.length;
|
|
int i = 0;
|
|
int i2 = 0;
|
|
int i3 = 0;
|
|
for (int i4 = 0; i4 < length; i4++) {
|
|
if (iArr[i4] > i) {
|
|
i = iArr[i4];
|
|
i3 = i4;
|
|
}
|
|
if (iArr[i4] > i2) {
|
|
i2 = iArr[i4];
|
|
}
|
|
}
|
|
int i5 = 0;
|
|
int i6 = 0;
|
|
for (int i7 = 0; i7 < length; i7++) {
|
|
int i8 = i7 - i3;
|
|
int i9 = iArr[i7] * i8 * i8;
|
|
if (i9 > i6) {
|
|
i5 = i7;
|
|
i6 = i9;
|
|
}
|
|
}
|
|
if (i3 > i5) {
|
|
int i10 = i3;
|
|
i3 = i5;
|
|
i5 = i10;
|
|
}
|
|
if (i5 - i3 <= length / 16) {
|
|
throw NotFoundException.getNotFoundInstance();
|
|
}
|
|
int i11 = i5 - 1;
|
|
int i12 = i11;
|
|
int i13 = -1;
|
|
while (i11 > i3) {
|
|
int i14 = i11 - i3;
|
|
int i15 = i14 * i14 * (i5 - i11) * (i2 - iArr[i11]);
|
|
if (i15 > i13) {
|
|
i12 = i11;
|
|
i13 = i15;
|
|
}
|
|
i11--;
|
|
}
|
|
return i12 << 3;
|
|
}
|
|
}
|