2012-09-29 41 views
5

Estoy usando rmagick para tratar de obtener cada píxel de un mapa de bits. Necesito obtener los valores de los colores en profundidad de 8 (256 colores), pero desafortunadamente cuando uso pixel. [Color] (pixel, rojo por ejemplo), los obtengo en profundidad de 16. Está sucediendo incluso después de que utilizado image.quantize (256).rmagick valor de color de píxel

Aquí está el código:

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 

¿Qué debería obtener sólo los valores de 0..255?

+0

Ya discutido aquí: http://stackoverflow.com/questions/6499161/pixel-rgb-with-imagemagick-and-rails – gnuf

Respuesta

2

Se almacenan en una 'profundidad cuántica' de 16 bits. Puede reconstruir la biblioteca para cambiar esto. O simplemente puede dividir cada valor por 257.

Hay una función llamada MagickExportImagePixels que puede obtener los datos de 8 bits de píxeles que desea. Cada vez que realice una transformación, etc. en una imagen, se convertirá nuevamente en píxeles de 16 bits.

+0

¿Por qué no en 256? – Nakilon

+0

Porque 256 * 255 = 65280. 257 * 255 = 65535, por lo tanto, le ofrece el rango completo al convertir de 16 bits a 8 bits – Bert

+0

Ha olvidado el piso. Su * 257 * 255 = 65535 * demuestra que solo uno de 65536 colores se convertiría a 255 - todos menores serían 254. La conversión correcta a datos de un byte es correcta cambio por 8 bits, es decir, división por 256. – Nakilon

Cuestiones relacionadas