2012-09-29 67 views
5

我正在使用rmagick來處理獲取位圖的每個單個像素。我需要獲得深度爲8(256色)的顏色值,但不幸的是,當我使用像素[顏色](像素,例如紅色)時,我將它們深入到了16層。使用image.quantize(256)。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..255值?

+0

已經在這裏討論過:http://stackoverflow.com/questions/6499161/pixel-rgb-with-imagemagick-and-rails – gnuf

回答

2

它們存儲在16位的「量子深度」中。你可以重建庫來改變它。或者你可以簡單地將每個值除以257.

有一個稱爲MagickExportImagePixels的函數,它可以獲取所需的8位像素數據。無論何時在圖像上執行轉換等,它都會轉換回16位像素。

+0

爲什麼不通過256? – Nakilon

+0

由於256 * 255 = 65280. 257 * 255 = 65535,因此在將16位轉換爲8位時給出全範圍 – Bert

+0

您忘記了地板。您的* 257 * 255 = 65535 *證明,只有65536種顏色中的一種將被轉換爲255 - 全部較低將爲254.適當轉換爲單字節數據是右移8位,即除以256. – Nakilon