Я работаю над приложением дополненной реальности для Android. Я реализую класс Тома Гибары и заменил BufferedImage, который не поддерживается Android, на Bitmap.
Метод «follow» (опубликован ниже) вызывает ошибку StackOverflow для меня. Это рекурсивная функция, но меня сбивает с толку то, что она будет правильно работать в течение примерно 10-15 секунд до сбоя на устройстве.
Из Google похоже, что люди успешно внедрили этот класс в Java, но мне интересно, если по какой-то причине он не работает на Android. Код Gibara указывает, что он предназначен только для однопоточного использования; Может ли это быть частью проблемы? Если нет, то очевидна ли моя ошибка?
Спасибо!
private void follow(int x1, int y1, int i1, int threshold) {
int x0 = x1 == 0 ? x1 : x1 - 1;
int x2 = x1 == width - 1 ? x1 : x1 + 1;
int y0 = y1 == 0 ? y1 : y1 - 1;
int y2 = y1 == height -1 ? y1 : y1 + 1;
data[i1] = magnitude[i1];
for (int x = x0; x <= x2; x++) {
for (int y = y0; y <= y2; y++) {
int i2 = x + y * width;
if ((y != y1 || x != x1) && data[i2] == 0
&& magnitude[i2] >= threshold) {
follow(x, y, i2, threshold);
return;
}
}
}
}