2015-06-17 22 views
5

MSDN states:विंडोज जीडीआई बीजीआरए के बजाय `COLORREF` के लिए आरजीबीए प्रारूप का उपयोग क्यों करता है?

0x00bbggrr

कम आदेश बाइट के रिश्तेदार तीव्रता के लिए एक मूल्य में शामिल है: हेक्साडेसिमल प्रपत्र निम्नलिखित

जब एक स्पष्ट आरजीबी रंग निर्दिष्ट करते समय, COLORREF मूल्य है लाल; दूसरे बाइट में हरे रंग के लिए मान होता है; और तीसरे बाइट में नीले रंग के लिए एक मान होता है। उच्च-आदेश बाइट शून्य होना चाहिए। एक बाइट के लिए अधिकतम मान 0xFF है।

wingdi.h

#define RGB(r,g,b)   ((COLORREF)((BYTE)(r) | ((BYTE)(g) << 8) | ((BYTE)(b) << 16))) 

#define GetRValue(rgb)  ((BYTE) (rgb)) 
#define GetGValue(rgb)  ((BYTE) ((rgb) >> 8)) 
#define GetBValue(rgb)  ((BYTE) ((rgb) >> 16)) 

से खिड़कियों के रूप में, थोड़ा endian है COLORREF RGBA प्रारूप में है। यह अजीब लगता है क्योंकि रंग प्रारूप नहीं है जो विंडोज आंतरिक रूप से उपयोग करता है, बीजीआर (ए)?

RGBQUAD संरचना COLORREF, BGRA के विपरीत,

typedef struct tagRGBQUAD { 
    BYTE rgbBlue; 
    BYTE rgbGreen; 
    BYTE rgbRed; 
    BYTE rgbReserved; 
} RGBQUAD; 

है जो के रूप में परिभाषित किया गया है।

के बाद से bitblt समारोह COLORREF मूल्यों की एक सरणी की उम्मीद है, इसका मतलब है हमेशा हर कॉल के दौरान BGRA को RGBA से चल रहा एक अतिरिक्त रूपांतरण है कि वहाँ है, अगर विंडोज अपने मूल प्रारूप के रूप में BGRA का उपयोग करें।

मुझे सही याद नहीं है, लेकिन मैंने कहीं भी पढ़ा है कि Winapi में उपयोग किए गए पिक्सेल प्रारूप में एक अजीब मिश्रण है।

क्या कोई कृपया समझा सकता है?

+0

आपका दावा असत्य है; मैक्रोज़ स्पष्ट रूप से 0x00bbggrr क्रम में COLORREF को इकट्ठा करते हैं। उन्हें फिर से देखें, या उनका उपयोग करके कुछ कोड लिखें और परिणाम देखें। – Clifford

+4

विंडोज बीएमपी फाइलों के लिए ओएस/2 प्रारूप का उपयोग करता है, और ओएस/2 प्रारूप कुछ अन्य तरीकों से भिन्न होता है जो विंडोज अन्यथा पसंद करेंगे। एक ऐसा है जिसे आपने पहले ही देखा है: आर और बी फ़्लिप किए गए हैं। दूसरा यह है कि ओएस/2 बिटमैप्स टॉप-डाउन के बजाय नीचे-नीचे हैं। –

+0

@ रेमंड चेन बिल्कुल! इसके कारण मुझे हमेशा बिट-अप की ऊंचाई निर्दिष्ट करते समय '-' रखना होगा .. फिर जीडीआई में आरजीबी प्रारूप रूपांतरण के बिना बिना किसी फिसलने का कोई तरीका है? – xiver77

उत्तर

0

COLORREFs दिनांक पिक्सेल प्रारूपों में बहुत कम मानकीकरण के समय की तारीख है। कई ग्राफिक्स एडाप्टर अभी भी पूर्ण 24- या 32-बिट रंग की बजाय पैलेट का उपयोग कर रहे थे, इसलिए यदि आपके एडाप्टर को बाइट री-ऑर्डर की आवश्यकता होती है, तो आपको उनमें से बहुत से करने की आवश्यकता नहीं थी। कुछ ग्राफिक्स एडेप्टर मल्टी-चैनल रंगों के एक विमान के बजाय अलग-अलग रंगीन विमानों में भी छवियों को संग्रहीत करते हैं। तब वापस कोई "सही" जवाब नहीं था।

आरजीबीक्वाड बीएमपी प्रारूप से आया, जो कि रेमंड चेन ने टिप्पणियों में उल्लेख किया है, ओएस/2 बिटमैप प्रारूप से आता है।

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

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