Rmagick直方图问题

时间:2011-08-13 00:33:46

标签: ruby rmagick

我在访问color_histogram()返回的哈希时遇到问题。我的图像中只有黑白像素,这非常令人沮丧。

当我这样做时

puts hist.inspect() # returns "{red=0, green=0, blue=0, opacity=0=>779753, red=65535, green=65535, blue=65535, opacity=0=>6679}"

根据文档,关键是Pixel对象,所以我构建

black = Magick::Pixel.from_color('black')
white = Magick::Pixel.from_color('white')

puts black.inspect # red=0, green=0, blue=0, opacity=0
puts white.inspect # red=65535, green=65535, blue=65535, opacity=0


puts hist[white] # raises exception: `[]': can't convert Magick::Pixel into Integer (TypeError)

我是否可以轻松访问直方图?

由于

1 个答案:

答案 0 :(得分:0)

您在color_histogram来电与hist之间的某处更改了hist[white]。这对我来说很简单,只需要一个简单的黑白bw.png

> i = Magick::Image.read('bw.png').first
=> bw.png PNG 100x100 100x100+0+0 DirectClass 8-bit 466b 
> h = i.color_histogram
=> {red=0, green=0, blue=0, opacity=0=>2342, red=65535, green=65535, blue=65535, opacity=0=>7658} 
> black = Magick::Pixel.from_color('black')
=> red=0, green=0, blue=0, opacity=0 
> h[black]
=> 2342 

你“无法将Magick :: Pixel转换为Integer(TypeError)”错误很容易使用数组重现:

> a = [ ]
=> [] 
> a[black]
TypeError: can't convert Magick::Pixel into Integer

Hash永远不会通过简单的访问产生TypeError。