2013-01-17 15 views
7

मेरे सी ++ एप्लिकेशन में, मेरे पास लाल, हरे, नीले मानों के संदर्भ में एक पीएनजी छवि का रंग है। मैंने इन मानों को तीन पूर्णांक में संग्रहीत किया है।एक आरजीबी रंग मान को C++ में हेक्साडेसिमल मान में कैसे परिवर्तित करें?

आरजीबी मूल्यों को समकक्ष हेक्साडेसिमल मान में कैसे परिवर्तित करें? की तरह इस प्रारूप में 0x1906

संपादित करें कि

उदाहरण: मैं GLuint के रूप में प्रारूप बचत होगी।

+1

उस संख्या में, '0x1906', जो बिट्स विभिन्न रंगों का प्रतिनिधित्व करता है? –

+0

मुझे इसके बारे में निश्चित नहीं है। लेकिन यह आरजीबी अनुक्रम की तरह होना चाहिए! पता नहीं है कि यह आपके प्रश्न का उत्तर देता है या नहीं। माफ़ कीजिये! – Tahlil

+0

रुको, आप कुछ प्रारूप में कनवर्ट करना चाहते हैं लेकिन आप नहीं जानते कि यह प्रारूप क्या है? उस समस्या को हल करने का केवल एक ही तरीका है, और कोई भी वास्तव में आपकी सहायता नहीं कर सकता है। –

उत्तर

17

स्टोर (एक long) की तरह कम से कम 24 बिट्स की एक अहस्ताक्षरित पूर्णांक में प्रत्येक रंग की उचित बिट्स:

unsigned long createRGB(int r, int g, int b) 
{ 
    return ((r & 0xff) << 16) + ((g & 0xff) << 8) + (b & 0xff); 
} 

अब के बजाय:

unsigned long rgb = 0xFA09CA; 

आप कर सकते हैं:

unsigned long rgb = createRGB(0xFA, 0x09, 0xCA); 

ध्यान दें कि उपर्युक्त अल्फा चैनल से निपट नहीं पाएगा। आप भी अल्फा एन्कोड करने के लिए (RGBA) की जरूरत है, तो आप इस के बजाय की जरूरत है:

unsigned long createRGBA(int r, int g, int b, int a) 
{ 
    return ((r & 0xff) << 24) + ((g & 0xff) << 16) + ((b & 0xff) << 8) 
      + (a & 0xff); 
} 

GLuint साथ unsigned long बदलें अगर है कि तुम क्या जरूरत है।

7

आप एक स्ट्रिंग का निर्माण करना चाहते हैं, तो आप शायद snprintf() उपयोग कर सकते हैं:

const unsigned red = 0, green = 0x19, blue = 0x06; 
char hexcol[16]; 

snprintf(hexcol, sizeof hexcol, "%02x%02x%02x", red, green, blue); 

इस स्ट्रिंग 001906" in hexcol`, जिसके कारण मैं अपने उदाहरण रंग (जो केवल चार अंक है व्याख्या करने के लिए चुना है का निर्माण करेगा जब यह छह होना चाहिए)।

आप इस तथ्य पर उलझन में प्रतीत होते हैं कि GL_ALPHA प्रीप्रोसेसर प्रतीक को OpenGL की शीर्षलेख फ़ाइलों में 0x1906 माना जाता है। यह रंग नहीं है, यह प्रारूप विनिर्देशक है जिसे ओपनजीएल एपीआई कॉल के साथ उपयोग किया जाता है जो पिक्सेल से निपटता है, इसलिए वे जानते हैं कि किस प्रारूप की अपेक्षा की जा सकती है।

आप स्मृति में एक PNG छवि है, तो GL_ALPHA प्रारूप को केवल अल्फा मूल्यों छवि में अनुरूप होगा (यदि है), ऊपर कुछ पूरी तरह से अलग है, क्योंकि यह एक स्ट्रिंग बनाता है। ओपनजीएल को स्ट्रिंग की आवश्यकता नहीं होगी, इसे आवश्यक प्रारूप में डेटा रखने वाले इन-मेमोरी बफर की आवश्यकता होगी।

यह कैसे काम करता है इस पर चर्चा के लिए glTexImage2D() मैनुअल पृष्ठ देखें।

+0

आपको मेरी समस्या ठीक है। यह वह जगह है जहां मैं अटक गया था। मेरे पास एक पीएनजी छवि के पीएलटीई खंड से प्राप्त आरजीबी मूल्य हैं। मैं बनावट प्रारूप सेट करना चाहता हूँ। लेकिन छवि का रंग का प्रकार 3 है जो एक अनुक्रमित रंग है। आम तौर पर अन्य रंग प्रकार जैसे 0 (PNG_COLOR_TYPE_GRAY) के लिए मैंने बनावट प्रारूप को 0x1909 (GL_LUMINANCE) के रूप में सेट किया है। लेकिन मुझे कलर टाइप 3 के लिए क्या करना चाहिए? मैंने इसके बारे में एक पोस्ट बनाई है http://stackoverflow.com/questions/14373099/png-image-texture-format-for-color-type-3 – Tahlil

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