class Percept::Runner

Constants

LINE_LENGTH

Public Instance Methods

blackish?(pixel) click to toggle source

def black?(pixel)

[pixel.red, pixel.green, pixel.blue].all? { |color| color == 0 }

end

# File lib/percept/runner.rb, line 17
def blackish?(pixel)
  [pixel.red, pixel.green, pixel.blue].all? { |color| color <= tolerance }
end
each_row(image) { |row, row_number| ... } click to toggle source
# File lib/percept/runner.rb, line 64
def each_row(image)
  column_count = image.columns
  row_count = image.rows
  row_count.times do |row_number|
    row = image.get_pixels(0, row_number, column_count, 1)
    yield(row, row_number)
  end
end
find_lines(row, row_number) click to toggle source
# File lib/percept/runner.rb, line 47
def find_lines(row, row_number)
  start_index = nil
  lines = []

  row.each_with_index do |pixel, index|
    if blackish?(pixel)
      start_index ||= index
    elsif start_index
      if index - start_index > LINE_LENGTH
        lines << Line.new(:start_x => start_index, :end_x => index, :row => row, :start_y => row_number)
      end
      start_index = nil
    end
  end
  lines
end
highlight_lines!(row) click to toggle source
# File lib/percept/runner.rb, line 22
def highlight_lines!(row)
  black = false
  start_index = nil
  line_indices = []

  row.each_with_index do |pixel, index|
    if blackish?(pixel) && start_index
      # continue
    elsif blackish?(pixel) && !start_index
      start_index = index
    elsif start_index
      if index - start_index > LINE_LENGTH
        line_indices += (start_index...index).to_a
      end
      start_index = nil
    end
  end

  line_indices.each do |index|
    pixel = row[index]
    pixel.red = scaled_color(256)
  end
  row
end
run() click to toggle source
# File lib/percept/runner.rb, line 73
def run
  images = Magick::ImageList.new('./permission.png')
  image = images.first
  #new_image = Magick::Image.new

  rows = image.rows
  columns = image.columns

  lines = []
  output_pixels = []
  each_row(image) do |row, index|
    output_pixels += row
    if index % 50 == 0
      puts "working on row: #{index} of #{rows}"
    end
    lines += find_lines(row, index)
    #out_pixels += highlight_lines!(row)
    #row.each do |pixel|
    #  pixel.red = scaled_color(256) if blackish?(pixel)
    #  out_pixels << pixel
    #end
  end

  line_count = lines.count
  lines.each_with_index do |line, index|
    puts "coloring line #{index} of #{line_count}"
    line.pixels.each do |pixel|
      pixel.red = scaled_color(256)
    end
  end

  #image.each_pixel do |pixel, column, row|
  #  pixel.red = 60000 if blackish?(pixel)
  #  out_pixels << pixel
  #end

  image = image.store_pixels(0, 0, columns, rows, output_pixels)
  image.write('new_permission.png')
end
scaled_color(value) click to toggle source
# File lib/percept/runner.rb, line 4
def scaled_color(value)
  (value * 256) - 1
end
tolerance() click to toggle source
# File lib/percept/runner.rb, line 10
def tolerance
  scaled_color(150)
end