Last active
February 14, 2016 23:15
-
-
Save isomorpheric/9efc323d24d56252f50f to your computer and use it in GitHub Desktop.
Image blur 2. Can't get it to work.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Image Blur 1 | |
class Image | |
def initialize(array) | |
@array = array | |
end | |
def output_image | |
@array.each do |row| | |
puts row.join(" ") | |
end | |
nil | |
end | |
def blur | |
@copy = @array | |
@array.each.with_index do |row, row_index| | |
row.each.with_index do |pixel, col_index| | |
if pixel == 1 | |
@copy.transform(row_index, col_index) | |
end | |
end | |
end | |
return @copy | |
end | |
def transform(row_index, col_index) | |
@array[row_index - 1][col_index] = 1 | |
@array[row_index + 1][col_index] = 1 | |
@array[row_index][col_index - 1] = 1 | |
@array[row_index][col_index + 1] = 1 | |
end | |
end | |
# ------------------------------------------------------------------tests | |
image = Image.new([ | |
[0, 0, 0, 0], | |
[0, 1, 0, 0], | |
[0, 0, 0, 1], | |
[0, 0, 0, 0] | |
]) | |
image.blur | |
image.output_image |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Couple of notes. I learned this the hard way, but by setting @copy = @array, you're linking the two together such that changes on one are made to the other. So when you do @array[row_index][col_index + 1] = 1, the program hangs. In order to create the copy such that it is separate from the initial array, you can do the following:
@array.each { |row| @copy << row.dup }
. Also, for testing purposes, I'd ditch the transform method and include it in the blur method, since they're both a part of achieving the same task, however that's just my opinion and up to you :). Lastly, don't forget to check for edge cases. If you're at col_index of [0] and you do [col_index - 1], that equals to @array[row_index][-1]. [-1] is a way to access the last index of the array, so even though you're at index 0, changing values at [-1] will in this case, change the value of the 3rd index of your column. So if you had [1, 0, 0, 0] at the top row and set if pixel == 1, @array[row_index][col_index - 1] = 1, the top row would then look like this: [1, 0, 0, 1]. This issue also applies to row_index, and also check for issues when you're at the last index in each column or row, and you want to access [+1] of that index (which won't exist). Hope that helps m8 good luck coding.