2012-09-29 16 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

संबंधित मुद्दे