我正在翻译一个用MATLAB创建的函数,它使用Rmagick将图像扇区的颜色强度降低到Ruby
for i=round(f/3):f
for j=1:round(c)
for k=1:p
A(i,j,k) = B(i,j,k) - a;
end
end
end
for i=1:round(2*f/3)
这会将所有3个RGB矩阵的颜色强度降低一些值(a)。试图用ruby代码重现这一点产生了这个:
(0..imagen.columns).each do |x|
((2 * imagen.rows) / 3..imagen.rows).each do |y|
imagen.pixel_color(x, y, 'pink')
end
end
我可以将图像的下三分之一更改为设置颜色(在本例中为粉红色)。
尝试使用每种颜色的方法将每个组件减少一些值(atenuacion)将不起作用,它将返回相同的图像。
(0..imagen.columns).each do |x|
((2 * imagen.rows) / 3..imagen.rows).each do |y|
pixel = imagen.pixel_color(x, y)
pixel.red - atenuacion
pixel.green - atenuacion
pixel.blue - atenuacion
imagen.pixel_color(x, y, pixel)
end
end
欢迎任何提示或建议,提前谢谢:D
答案 0 :(得分:0)
问题在于:
pixel.red - atenuacion
pixel.green - atenuacion
pixel.blue - atenuacion
您没有更改pixel.red
等的值。您只是从atenuacion
的值中减去pixel.red
,然后对结果不做任何操作。试试这个:
pixel.red -= atenuacion
pixel.green -= atenuacion
pixel.blue -= atenuacion
在上文中,pixel.red -= atenuacion
是pixel.red = pixel.red - atenuacion
的简写。我只是猜测pixel.red
等人是定居者和吸气者。如果没有,你可能需要做这样的事情:
pixel = imagen.pixel_color(x, y)
new_color = Magick::Pixel.new(
pixel.red - atenuacion,
pixel.green - atenuacion,
pixel.blue - atenuacion,
pixel.opacity)
imagen.pixel_color(x, y, new_color)