This is more interesting than it looks ... I use the 'shrinking circle' Voronoi generation technique, but, although it does draw to the screen as a diagnostic tool, it is primarily writing the circles to an internal buffer, and once the voronoi is generated, it runs a convolution kernel on it to determine the edges of the Voronoi polygons. And since some polygons abut with others of the same color, it merges areas of the same color into larger non-convex polygons... in effect it generates the shapes that you would color in if you were actually generating a Paint by Numbers painting (rather than something that looks like the final result).
Based on the Voronoi code plus my Bresenham's Circle drawing code from graphics101 studio. VERY SLOW. USE TURBO!