使用 Rmagick 降低 Ruby 中的 RGB 颜色强度
Reducing RGB color intensity in Ruby with Rmagick
我正在翻译一个使用 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) 是行不通的,它 returns 是同一幅图像。
(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
问题出在这里:
pixel.red - atenuacion
pixel.green - atenuacion
pixel.blue - atenuacion
您没有更改 pixel.red
的值,等等。您只是从 pixel.red
的值中减去 atenuacion
,然后不对结果执行任何操作。试试这个:
pixel.red -= atenuacion
pixel.green -= atenuacion
pixel.blue -= atenuacion
在上面,对于pixel.red = pixel.red - atenuacion
,pixel.red -= atenuacion
是shorthand。我只是猜测 pixel.red
等人既是 setter 也是 getter。如果没有,您可能需要改为执行以下操作:
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)
我正在翻译一个使用 MATLAB 制作的函数,该函数使用 Rmagick
将图像扇区的颜色强度降低到 Rubyfor 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) 是行不通的,它 returns 是同一幅图像。
(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
问题出在这里:
pixel.red - atenuacion
pixel.green - atenuacion
pixel.blue - atenuacion
您没有更改 pixel.red
的值,等等。您只是从 pixel.red
的值中减去 atenuacion
,然后不对结果执行任何操作。试试这个:
pixel.red -= atenuacion
pixel.green -= atenuacion
pixel.blue -= atenuacion
在上面,对于pixel.red = pixel.red - atenuacion
,pixel.red -= atenuacion
是shorthand。我只是猜测 pixel.red
等人既是 setter 也是 getter。如果没有,您可能需要改为执行以下操作:
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)