Я разрабатываю приложение для равномерного разделения сетки изображений и центрирования изображений (исходя из их сходства).До сих пор мне удавалось исправить сетку изображений с небольшими размерами, но всякий раз, когда я пытаюсь увеличить размер «спрайта» (например, 100x100), я получаю ошибку переполнения стека.
Да, я использую рекурсию, но всякий раз, когда проверяется пиксель, я устанавливаю логическое значение, чтобы деактивировать его, копировать в список и проверять остальные (во всех направлениях), пока список не заполнится.с изображением из сетки.Я не уверен, что это лучший способ, так как для каждого вызова я вызываю один и тот же метод 7 раз (предположим, что есть 7 смежных пикселей, которые еще не проверены) ... до тех пор, пока не останется пикселей для проверки, иЯ могу перейти к следующему изображению в сетке.
Я попытался отследить, где произошла ошибка, это было после проверки более или менее 1600 пикселей и добавления их в список.MyPixel - это класс, который содержит 4 переменные: x (int), y (int), color (Color) и флажок (bool)
public void processSprite(int i, int j)
{
//OOO
//OXO
//OOO
pixeltemp.Add(new MyPixel(imap.pixels[i, j].x, imap.pixels[i, j].y, imap.pixels[i, j].color));
imap.pixels[i, j].read = true;
//OOO
//OOX
//OOO
try
{
if (!imap.pixels[i + 1, j].read)
{
if (imap.pixels[i + 1, j].color.A == 0) //Found a Border
{
imap.pixels[i + 1, j].read = true;
}
else
{
processSprite(i + 1, j);
}
}
}
//... (code goes on)
}
- pixeltemp - это временный список пикселей, который содержитизображение
(List<MyPixel>)
- imap содержит все изображение
(List<MyPixel>)
Полагаю, это не проблема памяти, поскольку мое приложение занимает всего 16 МБ.
Мой вопрос: почему у меня эта ошибка «переполнение стека», если это не бесконечная рекурсия?Есть ли более простой способ сделать это?Я думаю, что мой код выглядит некрасиво, я просто понятия не имею, как его улучшить.
Заранее спасибо!