fillCircle function

Image fillCircle (
  1. Image image,
  2. int x0,
  3. int y0,
  4. int radius,
  5. int color
)

Draw and fill a circle into the image with a center of x0,y0 and the given radius and color.

The algorithm uses the same logic as drawCircle to calculate each point around the circle's circumference. Then it iterates through every point, finding the smallest and largest y-coordinate values for a given x- coordinate.

Once found, it draws a line connecting those two points. The circle is thus filled one vertical slice at a time (each slice being 1-pixel wide).

Implementation

Image fillCircle(Image image, int x0, int y0, int radius, int color) {
  var points = _calculateCircumference(image, x0, y0, radius);

  // sort points by x-coordinate and then by y-coordinate
  points.sort((a, b) => (a.x == b.x) ? a.y.compareTo(b.y) : a.x.compareTo(b.x));

  var start = points.first;
  var end = points.first;

  for (var pt in points.sublist(1)) {
    if (pt.x == start.x) {
      end = pt;
    } else {
      drawLine(image, start.xi, start.yi, end.xi, end.yi, color);
      start = pt;
      end = pt;
    }
  }
  drawLine(image, start.xi, start.yi, end.xi, end.yi, color);
  return image;
}