Вы всегда можете повторно сэмплировать изображение после каждой заливки и перезапускать его всякий раз, когда найдете цвет, соответствующий исходному фону.
Алгоритмы заполнения Flood предназначены для запуска в одном месте, а оттуда заполняют ограниченную область, область аналогичных цветов. Круг не соответствует этому цвету фона, поэтому алгоритм заливки не «прыгает» на него, чтобы найти другие.
Решение заключается в затоплении различных областей.
Вот очень грубый, рекурсивный, медленный алгоритм заполнения потока (из памяти, не проверенный):
public void floodfill(Image img, int x, int y, Color oldColor, Color newColor) {
// Check boundary
if (img.contains(x, y)) {
// Get current pixel color
Color currentColor = img.getColor(x, y);
// Check color match
if (currentColor.equals(oldColor)) {
// Set to new color
img.setColor(x, y, newColor);
// Start again on each of the neighbors
floodFill(img, x - 1, y, oldColor, newColor);
floodFill(img, x + 1, y, oldColor, newColor);
floodFill(img, x, y - 1, oldColor, newColor);
floodFill(img, x, y + 1, oldColor, newColor);
}
}
}