Мне кажется, что проблема может быть из-за того, что внутренний цикл (c x2 и y2) проходит по слишком ограниченной области — по прямоугольнику от (x1, y1) до (width, height), хотя должен пройтись по всем элементам прямоугольника (x1 + 1, 0) — (width, height) и по элементам (x1, y1 +1) — (x1, height).
В вашем же случае никогда не произойдет сравнения таких точек, например, как (x1, y1) и (x1 + 1, y1 -1), т.к. вторая не входит во внутренний цикл.