2011-01-26 25 views
36

में कनवर्ट करें तो BufferedImage में, आपको एक एकल पूर्णांक प्राप्त होता है जिसमें आरजीबी मान प्रदर्शित होते हैं। अब तक मैं आरजीबी मान प्राप्त करने के लिए निम्न का उपयोग करता हूं:आरजीबी मानों को इंटीजर

// rgbs is an array of integers, every single integer represents the 
// RGB values combined in some way 
int r = (int) ((Math.pow(256,3) + rgbs[k])/65536); 
int g = (int) (((Math.pow(256,3) + rgbs[k])/256) % 256); 
int b = (int) ((Math.pow(256,3) + rgbs[k]) % 256); 

और अब तक, यह काम करता है।

मैं क्या करने की जरूरत आंकड़ा बाहर कैसे एक पूर्णांक पाने के लिए तो मैं BufferedImage.setRGB() उपयोग कर सकते हैं, क्योंकि वह उसी प्रकार के डेटा यह मुझे दिया लेता है।

उत्तर

68

मुझे लगता है कि कोड कुछ की तरह है:,

int red = (rgb >> 16) & 0xFF; 
int green = (rgb >> 8) & 0xFF; 
int blue = rgb & 0xFF; 
+0

मुझे नहीं लगता कि आपको दूसरी दो पंक्तियों पर एक int की आवश्यकता है। और तीसरी पंक्ति "आरजीबी = ..." होना चाहिए, है ना? –

+0

यह एक एकल पूर्णांक है। एक पूर्णांक में 32 बिट होते हैं। पहले 8 बिट अल्फा मान (जो शून्य है) के लिए हैं। लाल के लिए अगला 8, फिर हरे रंग के लिए अगले 8 और नीले रंग के लिए अगले 8। कोशिश करो। यदि अंतिम आउटपुट आपको प्रारंभिक इनपुट के बराबर करता है तो आप जानते हैं कि रूपांतरण सही तरीके से किया गया था। – camickr

+0

एर्म, मुझे लगता है कि यह रंग गहराई पर निर्भर करेगा। आपका उदाहरण 24-बिट रंग (चैनल प्रति 8 बिट) जैसा दिखता है - क्या यह है कि 'बुफर्ड इमेज' की अपेक्षा क्या है? –

22
int rgb = ((r&0x0ff)<<16)|((g&0x0ff)<<8)|(b&0x0ff); 

आपको लगता है कि आपके आर, जी जानते हैं:, मेरा मानना ​​है कि आप का उपयोग कर अलग-अलग मान प्राप्त कर सकते

int rgb = red; 
rgb = (rgb << 8) + green; 
rgb = (rgb << 8) + blue; 

इसके अलावा और बी मान कभी नहीं हैं> 255 या < 0 आपको & 0x0ff

Addit की आवश्यकता नहीं है ionaly

int red = (rgb>>16)&0x0ff; 
int green=(rgb>>8) &0x0ff; 
int blue= (rgb) &0x0ff; 

गुणा करने की कोई आवश्यकता नहीं है।

17

अगर आर, जी, बी = 3 पूर्णांक 0 से 255 तक प्रत्येक रंग

तो के लिए मूल्यों

rgb = 65536 * r + 256 * g + b; 

ख एक के लिए संयुक्त एकल rgb मूल्य, आर, जी के समग्र मूल्य है कुल 16777216 संभावित रंगों।

+1

मैं इसे 'आरजीबी = 0xFFFF * आर + 0xFF * जी + बी;' पढ़ने योग्यता –

+2

0xFF = 255 के लिए संशोधित करता हूं। 0x100 होना चाहिए। इसी तरह 0XFFFF के लिए – geoxile

1

व्यक्तिगत रंग मान आप पिक्सेल (एक्स, वाई) के लिए निम्नलिखित की तरह रंग का उपयोग कर सकते प्राप्त करने के लिए।

import java.awt.Color; 
import java.awt.image.BufferedImage; 

Color c = new Color(buffOriginalImage.getRGB(x,y)); 
int red = c.getRed(); 
int green = c.getGreen(); 
int blue = c.getBlue(); 

ऊपर आप 255

0 से रेंज में लाल, ग्रीन और ब्लू का पूर्णांक मान देना मूल्यों आरजीबी से आप ऐसा कर सकते हैं सेट करने के लिए होगा:

Color myColour = new Color(red, green, blue); 
int rgb = myColour.getRGB(); 

//Change the pixel at (x,y) ti rgb value 
image.setRGB(x, y, rgb); 

कृपया सलाह दीजिये कि उपरोक्त एक पिक्सेल के मान को बदलता है। इसलिए यदि आपको मूल्य को पूरी छवि में बदलने की आवश्यकता है तो आपको दो लूप के लिए छवि का उपयोग करने की आवश्यकता हो सकती है।

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