我对Ruby或者编程都很新,所以请原谅我,如果我在这里用逻辑做出“noob2错误。”
我正在尝试使用Chunky_PNG为图像中的每个像素(及其位置)获取二进制rgba像素值的输出。
虽然输出是正确的,但它只显示第一行,好像外环只运行一次。
是否存在逻辑错误,或者while循环中的while循环是否永远不起作用? 这可能是不好的做法,我可以想象,但我仍然想知道为什么它不符合它的预期。
require 'chunky_png'
image = ChunkyPNG::Image.from_file('test.png')
#vars
$width0 = 0
$widthmax = image.dimension.width.to_i
$height0 = 0
$heightmax = image.dimension.height.to_i
#main
while $height0 < $heightmax do
while $width0 < $widthmax do
puts image[$width0,$height0].to_s(2)[0..7] + " " + image[0,0].to_s(2)[8..15] + " " + image[0,0].to_s(2)[16..23] + " " + $height0.to_s + "," + $width0.to_s
$width0 += 1
end
width0 = 0
$height0 += 1
end
答案 0 :(得分:2)
您错过了$
你有
width0 = 0
但你想要
$width0 = 0
这具有从不将$ width0重置为零的效果,因此仅输出第一行。它认为内部循环永远不必再次运行,因为$width0
在第一次迭代之后的每次迭代中仍然处于其最大值。
(我可能还应该补充一点,全局变量不是最好的主意,正如其他人指出的那样,但你确实问过为什么脚本只输出第一行。:))
答案 1 :(得分:0)
错误是Ray Toal解释的缺失$符号
使用
更容易each
表示循环。那么你不需要自己处理循环索引
($height0..$heightmax).each do |height|
($width0..$widthmax).each do |width|
puts image[width,height].to_s(2)[0..7] + " " + image[0,0].to_s(2)[8..15] + " " + image[0,0].to_s(2)[16..23] + " " + height.to_s + "," + width.to_s
end
end