package com.liato.bankdroid.banking.banks.nordea;
import android.graphics.Bitmap;
import java.util.ArrayList;
public class CaptchaBreaker {
private final static int[][][] NUMBERS = CaptchaBreakerNumbers.NUMBERS;
public static String iMustBreakYou(Bitmap bitmap) {
int width = bitmap.getWidth();
int height = bitmap.getHeight();
ArrayList<Segment> segments = new ArrayList<Segment>();
boolean numberpart = false;
Segment segment = new Segment();
for (int x = 0; x < width; x++) {
boolean numberpartcol = false;
for (int y = 0; y < height; y++) {
int color = bitmap.getPixel(x, y);
if (color != 0xffffffff) {
if (!numberpart) {
segment.start = x;
}
numberpartcol = true;
numberpart = true;
break;
}
}
if (numberpart && !numberpartcol) {
numberpart = false;
segment.end = x - 1;
segments.add(segment);
segment = new Segment();
}
}
if (segment.end == -1 && segment.start >= 0) {
segment.end = width - 1;
segments.add(segment);
}
StringBuilder sb = new StringBuilder(segments.size());
for (Segment s : segments) {
Bitmap numberSegment = Bitmap.createBitmap(bitmap, s.start, 0, s.end - s.start, height);
sb.append(extractNumber(numberSegment));
numberSegment.recycle();
numberSegment = null;
}
return sb.toString();
}
private static String extractNumber(Bitmap bitmap) {
int width = bitmap.getWidth();
for (int i = 0; i < NUMBERS.length; i++) {
int matches = 0;
int[][] number = NUMBERS[i];
for (int pi = 0; pi < number.length; pi++) {
int[] point = number[pi];
if (point[0] >= width) {
break;
}
int color = bitmap.getPixel(point[0], point[1]);
if ((color == 0xffffffff && point[2] == 0) || (color != 0xffffffff
&& point[2] == 1)) {
matches++;
}
}
if (matches == number.length) {
return Integer.toString(i);
}
}
return "?";
}
}
class Segment {
public int start = -1;
public int end = -1;
@Override
public String toString() {
return String.format("Segment {start=%d, end=%d}", start, end);
}
}