我在Ruby中有图像处理脚本。我想获取一个数组中的所有像素,然后执行我将更改随机像素以使图像噪声的脚本。但是当我得到这个像素时,我得到了一个零错误。这是我的代码。
require 'mini_magick'
first_image = MiniMagick::Image.new("123.png")
a = 0
b = 0
pixels = first_image.get_pixels
loop do
print "\n"
a=a+1
while pixels[a][b] != nil do
print pixels[a][b].to_s + "\n"
b+=1
end
b = 0
break if pixels[a][b] == nil
end
这就是我在终端中收到的内容:
Imagenoise.rb:10:in `block in <main>': undefined method `[]' for nil:NilClass (NoMethodError)
from Imagenoise.rb:7:in `loop'
from Imagenoise.rb:7:in `<main>'
答案 0 :(得分:1)
您的代码不会检查您是否到达了图片的末尾。因此,pixels[a]
会在某个时刻返回nil
(一旦a
大于图片中的像素数),pixel[a][b]
会失败,因为您无法调用nil[b]
。
你可以通过不手动遍历数组而是使用each
块来避免这种情况:
require 'mini_magick'
image = MiniMagick::Image.new('123.png')
pixels = image.get_pixels
pixels.each do |pixel|
pixel.each do |color|
puts color
end
end
答案 1 :(得分:0)
抛出错误是因为pixels[a]
为零,因此pixels[a][b]
出错。你可以做这样的事情来防止错误。
while pixels[a] != nil do
print pixels[a][b].to_s + "\n"
b+=1
end