Module: Contrek::Bitmaps::Painting
- Included in:
- Bitmap
- Defined in:
- lib/contrek/bitmaps/painting.rb
Class Method Summary collapse
- .direct_draw_polygons(polygons, png_image, zoom: 1) ⇒ Object
- .draw_polygon(sequence, png_image, color, zoom, margin = 0) ⇒ Object
Instance Method Summary collapse
Class Method Details
.direct_draw_polygons(polygons, png_image, zoom: 1) ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/contrek/bitmaps/painting.rb', line 24 def self.direct_draw_polygons(polygons, png_image, zoom: 1) polygons.compact.each do |poly| if (bounds = poly[:bounds]) b_factor = 3.to_f / zoom bounds_polygon = [ {x: bounds[:min_x] - b_factor, y: bounds[:min_y] - b_factor}, {x: bounds[:max_x] + b_factor, y: bounds[:min_y] - b_factor}, {x: (bounds[:max_x] + b_factor), y: bounds[:max_y] + b_factor}, {x: (bounds[:min_x] - b_factor), y: bounds[:max_y] + b_factor} ] draw_polygon(bounds_polygon, png_image, ChunkyPNG::Color("blue @ 1.0"), zoom) end color = ChunkyPNG::Color("red @ 1.0") draw_polygon(poly[:outer], png_image, color, zoom) color = ChunkyPNG::Color("green @ 1.0") poly[:inner].each do |sequence| draw_polygon(sequence, png_image, color, zoom) end end end |
.draw_polygon(sequence, png_image, color, zoom, margin = 0) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/contrek/bitmaps/painting.rb', line 45 def self.draw_polygon(sequence, png_image, color, zoom, margin = 0) return if sequence.empty? sequence.each_cons(2) do |coords| png_image.draw_line(coords[0][:x] * zoom, coords[0][:y] * zoom, coords[1][:x] * zoom, coords[1][:y] * zoom, color) end png_image.draw_line(sequence[0][:x] * zoom, sequence[0][:y] * zoom, sequence[-1][:x] * zoom, sequence[-1][:y] * zoom, color) end |
Instance Method Details
#bitmap_colors(step: 1, max: 0) ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/contrek/bitmaps/painting.rb', line 10 def bitmap_colors(step: 1, max: 0) colors = {} step = 1 if step <= 0 0.step(h - 1, step) do |h| 0.step(w - 1, step) do |w| color = value_at(w, h) colors[color] ||= 0 colors[color] += 1 break if colors.size == max end end colors.sort_by { |color, count| -color } end |
#draw_line(start_x, start_y, end_x, end_y, value) ⇒ Object
6 7 8 |
# File 'lib/contrek/bitmaps/painting.rb', line 6 def draw_line(start_x, start_y, end_x, end_y, value) raise NoMethodError end |