Iteracyjny algorytm floodfill

0

Cześć wszystkim. W krótkim programie z przetwarzania obrazu korzystam z algorytmu floodfill w celu pozbycia się jasnego tła, zostawiając elementy główne. Wszystko działa w porządku, przy czym jest jeden problem. Korzystam z funkcji algorytmu ze strony http://lodev.org/cgtutor/floodfill.html

 
#define stackSize 16777216
int stack[stackSize];
int stackPointer;


bool pop(int& x, int& y)
{
  if(stackPointer > 0)
  {
    int p = stack[stackPointer];
    x = p / h;
    y = p % h;
    stackPointer--;
    return 1;
  }
  else
  {
    return 0;
  }
}

bool push(int x, int y)
{
  if(stackPointer < stackSize - 1)
  {
    stackPointer++;
    stack[stackPointer] = h * x + y;
    return 1;
  }
  else
  {
    return 0;
  }
}

void emptyStack()
{
  int x, y;
  while(pop(x, y));
}



void floodFill4Stack(int x, int y, int newColor, int oldColor)
{
  if(newColor == oldColor) return; //avoid infinite loop
  emptyStack();

  static const int dx[4] = {0, 1, 0, -1}; // relative neighbor x coordinates
  static const int dy[4] = {-1, 0, 1, 0}; // relative neighbor y coordinates

  if(!push(x, y)) return;
  while(pop(x, y))
  {
    screenBuffer[y][x] = newColor;
    for(int i = 0; i < 4; i++) {
      int nx = x + dx[i];
      int ny = y + dy[i];
      if(nx > 0 && nx < w && ny > 0 && ny < h && screenBuffer[ny][nx] == oldColor) {
        if(!push(nx, ny)) return; //h i w to wymiary obrazka
      }
    }
  }
}

Problem jest taki, że algorytm działa na obrazku o wymiarach kwadratu, ja natomiast korzystam z obrazka o wymiarach 600x800 i po wykonaniu algorytmu zostaje 200 pikseli białego prostokąta na dole. Wie ktoś, w jaki sposób rozwiązać ten problem?

Z góry dzięki,
Pozdrawiam

0

Obrazek prezentuje efekt po wykonaniu floodfill. Algorytm nigdy nie dochodzi do samego dołu obrazka.