    #! /usr/local/bin/ruby -w
    require 'RMagick'

    Compliance = {Magick::SVGCompliance => 'SVG',
                  Magick::X11Compliance => 'X11',
                  Magick::XPMCompliance => 'XPM',
                  Magick::AllCompliance => 'All'}

    colors = Magick::ImageList.new

    # Add a row of "null" colors so we'll have
    # room to add the title at the top.
    4.times { colors.read('null:') }

    # Create a 200x25 image for each named color.
    # Label with the name, RGB values, and compliance type.
    Magick::colors { |c|
        if c.name !~ /gray/ then    # omit SVG 'grays'
            colors.new_image(200, 25) {
                self.background_color = c.color
                self.border_color = 'gray50'
                }
            rgb  = sprintf('#%02x%02x%02x', c.color.red&0xff,  c.color.green&0xff, c.color.blue&0xff)
            rgb += sprintf('%02x', c.color.opacity&0xff) if c.color.opacity != 0
            colors.cur_image['Label'] = "#{c.name} (#{rgb}) #{Compliance[c.compliance]}"
        end
    }

    # Keep track of how far along the montage is.
    monitor = Proc.new { |text, quantum, span|
        printf("%s %3.1f%% complete\n", text, ((quantum/span.to_f)*100.0))
        }
    Magick.set_monitor(monitor)

    # Montage. Each image will have 40 tiles.
    # There will be 16 images.
    montage = colors.montage {
        self.geometry = '200x25+10+5'
        self.gravity = Magick::CenterGravity
        self.tile = '4x10'
        self.background_color = 'black'
        self.border_width = 1
        self.fill = 'white'
        self.stroke = 'transparent'
    }

    Magick.set_monitor(nil)

    # Add the title at the top, over the 'null:'
    # tiles we added at the very beginning.
    title = Magick::Draw.new
    title.annotate(montage, 0,0,0,40, 'Named Colors') {
        self.font_family = 'Helvetica'
        self.fill = 'white'
        self.stroke = 'transparent'
        self.pointsize = 32
        self.font_weight = Magick::BoldWeight
        self.gravity = Magick::NorthGravity
    }

    montage.each { |f| f.compression = Magick::ZipCompression }
    montage.write('colors.miff')

    # Make a small sample of the full montage to display in the HTML file.
    sample = montage[9].crop(55, 325, 495, 110)
    sample.write('colors.gif')
    exit