Sha256: e1943b33509a247a34bd1e2045c4e0ebe6a1061bf363b34c7aaa7c693a54279d

Contents?: true

Size: 1.07 KB

Versions: 13

Compression:

Stored size: 1.07 KB

Contents

#!/usr/bin/env ruby -w

require 'rmagick'

NUM_COLORS = 256
HIST_HEIGHT = 200

img = Magick::Image.read('images/Hot_Air_Balloons_H.jpg').first
img = img.quantize(NUM_COLORS)

hist = img.color_histogram

# sort pixels by increasing count
pixels = hist.keys.sort_by {|pixel| hist[pixel] }

scale = HIST_HEIGHT / (hist.values.max*1.025)   # put 2.5% air at the top

gc = Magick::Draw.new
gc.stroke_width(1)
gc.affine(1, 0, 0, -scale, 0, HIST_HEIGHT)

# handle images with fewer than NUM_COLORS colors
start = NUM_COLORS - img.number_colors

pixels.each do |pixel|
  gc.stroke(pixel.to_color)
  gc.line(start, 0, start, hist[pixel])
  start = start.succ
end

hatch = Magick::HatchFill.new('white', 'gray95')
canvas = Magick::Image.new(NUM_COLORS, HIST_HEIGHT, hatch)
gc.draw(canvas)

text = Magick::Draw.new
text.annotate(canvas, 0, 0, 0, 20, "Color Frequency\nHistogram") do
  self.pointsize = 10
  self.gravity = Magick::NorthGravity
  self.stroke = 'transparent'
end

canvas.border!(1, 1, 'white')
canvas.border!(1, 1, 'black')
canvas.border!(3, 3, 'white')
canvas.write('color_histogram.gif')

exit

Version data entries

13 entries across 13 versions & 3 rubygems

Version Path
rmagick-windows-2.16.5 doc/ex/color_histogram.rb
rmagick-windows-2.16.4 doc/ex/color_histogram.rb
rmagick-windows-2.16.3 doc/ex/color_histogram.rb
rmagick-windows-2.16.2 doc/ex/color_histogram.rb
rmagick-windows-2.16.1 doc/ex/color_histogram.rb
mdg-1.0.1 vendor/bundle/ruby/2.3.0/gems/rmagick-2.16.0/doc/ex/color_histogram.rb
rmagick-2.16.0 doc/ex/color_histogram.rb
rmagick-2.15.4 doc/ex/color_histogram.rb
rmagick-2.15.3 doc/ex/color_histogram.rb
rmagick-2.15.2 doc/ex/color_histogram.rb
rmagick-2.15.1 doc/ex/color_histogram.rb
rmagick-2.15.0 doc/ex/color_histogram.rb
rmagick-2.14.0 doc/ex/color_histogram.rb