我的 rake 脚本上有一个“堆栈级别太深”错误的大问题。该脚本基本上读取包含一些值为“-1”的像素的图像。因此,当找到“-1”值时,我使用递归函数来分析他们的邻居,如果他们也有“-1”值,则将其保存在数组中。我的对象是“-1”形状。
我做了很多测试,当我评论“label_recursively”函数时,错误没有显示出来。但我不知道问题出在哪里。
我尝试了不同版本的 ruby,但结果相同。
加载图像I'm using Chunky PNG gem, with Rails 4.0.0 and Ruby 2.1.2p95
这是我的代码:
class ChunkyPNG::Image
def neighbors(x,y)
# up, right, down, left
[[x, y-1], [x+1, y], [x, y+1], [x-1, y]].select do |xy|
include_xy?(*xy)
end
end
end
def label_recursively(image, areas, label, x, y)
image[x,y] = label
(areas[label] ||= []) << [x,y]
image.neighbors(x,y).each do |xy|
if image[*xy] == -1
areas[label] << xy
label_recursively(image, areas, label, *xy)
end
end
end
working_image = ChunkyPNG::Image.from_file(file)
areas, label = {}, 0
working_image.height.times do |y|
working_image.row(y).each_with_index do |pixel, x|
label_recursively(working_image, areas, label += 1, x, y) if pixel == -1
end
end
areas.each do
area = areas.values.max { |result, area| result.length <=> area.length }
areas.delete(areas.key(area))
x, y = area.map { |xy| xy[0] }, area.map { |xy| xy[1] }
image.rect(x.min, y.min, x.max, y.max, ChunkyPNG::Color.rgb(0,255,0))
end
提前致谢