sparse_color.rb

require "RMagick"

def draw_centers(img, all_four = true)
   gc = Magick::Draw.new
   gc.fill("white")
   gc.stroke("black")
   gc.circle(30, 10, 30, 12)
   gc.circle(10, 80, 10, 82)
   gc.circle(70, 60, 70, 62)
   gc.circle(80, 20, 80, 22) if all_four
   gc.draw(img)
   img
end

imgl = Magick::ImageList.new
img = Magick::Image.new(100, 100)

begin

  img2 = img.sparse_color(Magick::VoronoiColorInterpolate, 30, 10, "red",
                             10, 80, "blue", 70, 60, "lime", 80, 20, "yellow")
  img2["Label"] = "Voroni"
  imgl << draw_centers(img2)

  img2 = img.sparse_color(Magick::ShepardsColorInterpolate, 30, 10, "red",
                             10, 80, "blue", 70, 60, "lime", 80, 20, "yellow")
  img2["Label"] = "Shepards"
  imgl << draw_centers(img2)

  img2 = img.sparse_color(Magick::BilinearColorInterpolate, 30, 10, "red",
                             10, 80, "blue", 70, 60, "lime", 80, 20, "yellow")
  img2["Label"] = "Bilinear"
  imgl << draw_centers(img2)

  img2 = img.sparse_color(Magick::BarycentricColorInterpolate, 30, 10, "red",
                             10, 80, "blue", 70, 60, "lime")
  img2["Label"] = "Barycentric"
  imgl << draw_centers(img2, false)

  montage = imgl.montage do
              self.background_color = "none"
              self.geometry = "100x100+10+10"
              self.tile = "2x2"
            end

  montage.write("sparse_color.png")

rescue NotImplementedError, NameError

  img = Magick::Image.read("images/notimplemented.gif").first
  img.resize!(240, 272)
  img.write("sparse_color.png")

end

Close window