2012-09-29 3 views
5

저는 비트 맵의 ​​각 단일 픽셀을 가져 오는 것을 다루기 위해 rmagick을 사용하고 있습니다. 나는 깊이 8 (256 색)의 색 값을 가져올 필요가 있지만 불행히도 픽셀을 사용하면 [color] (예 : 빨간색 픽셀), 나는 깊이 16을 얻고 있습니다. 사용 된 image.quantize (256). 내가 0..255 단지 값을 얻을해야합니까rmagick 픽셀 색상 값

require 'RMagick' 
include Magick 

image = ImageList.new("image.bmp") 
image3 = image.quantize(number_colors = 256) 
puts image3.number_colors 

image2 = Image.new(image.columns, image.rows) 

(0..image.columns).each do |x| 
    (0..image.rows).each do |y| 
     pixel = image3.pixel_color(x, y) 

    print pixel.red 
    print ", " 
    print pixel.green 
    print ", " 
    print pixel.blue 
    print "\n" 

    image2.pixel_color(x, y, pixel) 
    end 
end 

: 여기

코드인가?

+0

이미 여기에서 논의되었습니다. http://stackoverflow.com/questions/6499161/pixel-rgb-with-imagemagick-and-rails – gnuf

답변

2

이들은 16 비트의 '양자 깊이'로 저장됩니다. 이를 변경하기 위해 라이브러리를 다시 빌드 할 수 있습니다. 또는 각 값을 257로 나누면됩니다.

원하는 8 비트 픽셀 데이터를 얻을 수있는 MagickExportImagePixels라는 함수가 있습니다. 이미지에서 변환 등을 수행 할 때마다 16 비트 픽셀로 다시 변환됩니다.

+0

왜 256 세가되지 않습니까? – Nakilon

+0

256 * 255 = 65280. 257 * 255 = 65535이므로 16 비트를 8 비트로 변환 할 때 전체 범위가 제공됩니다. – Bert

+0

바닥재를 잊어 버렸습니다. 귀하의 * 257 * 255 = 65535 *는 65536 색 중 하나만 255로 변환된다는 것을 증명합니다. 모두 더 낮 으면 254가됩니다. 1 바이트 데이터로의 적절한 변환은 8 비트 씩 오른쪽으로 이동합니다 (예 : 256 나누기). – Nakilon