class GraphicalEditor::Image
Constants
- DEFAULT_COLOR
Public Class Methods
new(m, n)
click to toggle source
# File lib/graphical_editor/image.rb, line 6 def initialize(m, n) @pixels = default_color_pixels_for(m, n) end
Public Instance Methods
clear()
click to toggle source
# File lib/graphical_editor/image.rb, line 10 def clear @pixels.map! do |pixel| pixel.map! {DEFAULT_COLOR} end end
colourize(x, y, colour)
click to toggle source
# File lib/graphical_editor/image.rb, line 16 def colourize(x, y, colour) @pixels[y.pred][x.pred] = colour end
draw_horizontal(x1, x2, y, colour)
click to toggle source
# File lib/graphical_editor/image.rb, line 26 def draw_horizontal(x1, x2, y, colour) (x1..x2).each do |x| colourize(x, y, colour) end end
draw_vertical(x, y1, y2, colour)
click to toggle source
# File lib/graphical_editor/image.rb, line 20 def draw_vertical(x, y1, y2, colour) (y1..y2).each do |y| colourize(x, y, colour) end end
fill_region(x, y, colour)
click to toggle source
# File lib/graphical_editor/image.rb, line 32 def fill_region(x, y, colour) target_colour = @pixels[y.pred][x.pred] flood_fill(x, y, target_colour, colour) end
to_s()
click to toggle source
# File lib/graphical_editor/image.rb, line 37 def to_s @pixels.map {|pixel| pixel.join(' ')}.join("\n") end
Private Instance Methods
default_color_pixels_for(m, n)
click to toggle source
# File lib/graphical_editor/image.rb, line 42 def default_color_pixels_for(m, n) [].tap {|pixels| n.times {pixels << Array.new(m, DEFAULT_COLOR)}} end
flood_fill(x, y, target_colour, replacement_colour)
click to toggle source
# File lib/graphical_editor/image.rb, line 46 def flood_fill(x, y, target_colour, replacement_colour) if within_bounds(x, y) && @pixels[y.pred][x.pred] == target_colour @pixels[y.pred][x.pred] = replacement_colour flood_fill(x, y.pred, target_colour, replacement_colour) flood_fill(x, y.next, target_colour, replacement_colour) flood_fill(x.pred, y, target_colour, replacement_colour) flood_fill(x.next, y, target_colour, replacement_colour) end end
within_bounds(x, y)
click to toggle source
# File lib/graphical_editor/image.rb, line 56 def within_bounds(x, y) x >= 1 && x <= @pixels.first.size && y >= 1 && y <= @pixels.size end