2011-05-25 5 views
13

में एक आरजीबी रंग के लिए एक इंटीजर मैपिंग तो अभी मेरे पास 0 और 2^24 के बीच एक संख्या है, और मुझे इसे तीन आरजीबी मूल्यों में मैप करने की आवश्यकता है। मुझे यह समझने में थोड़ा परेशानी हो रही है कि मैं इसे कैसे पूरा करूंगा। किसी भी सहायता की सराहना की है।सी #

+0

क्या आपकी संख्या 0x00RRGGBB (हेक्स) है? –

उत्तर

16

आप

Color c = Color.FromArgb(someInt); 

कर सकते हैं और फिर लाल, ग्रीन और ब्लू मूल्यों क्रमशः

+0

हां, मैंने शपथ ली थी कि मैंने कोशिश की थी। मानव त्रुटि, मुझे लगता है। तुम्हारे सहयोग के लिए तुम्हे धन्यवाद। –

13

निर्भर करता है रंग है, जिस पर जहां, आप थोड़ा व्यक्तिगत प्राप्त करने के लिए स्थानांतरण का उपयोग कर सकते के लिए c.R, c.G और c.B का उपयोग इस तरह के रंग:

int rgb = 0x010203; 
var color = Color.FromArgb((rgb >> 16) & 0xff, (rgb >> 8) & 0xff, (rgb >> 0) & 0xff); 

उपर्युक्त अभिव्यक्ति 0x00RRGGBB मानती है लेकिन आपके रंग 01 हो सकते हैंइस मामले में बस 16, 8, 0 के आसपास मूल्यों को बदलें।

यह System.Windows.Media.Color या अपनी खुद की रंग कक्षा के बजाय System.Drawing.Color का भी उपयोग करता है। यह आवेदन पर निर्भर करता है।

3

आप पूर्णांक से बाइट्स प्राप्त करने के लिए BitConverter वर्ग का उपयोग कर सकते हैं:

byte[] values = BitConverter.GetBytes(number); 
if (!BitConverter.IsLittleEndian) Array.Reverse(values); 

सरणी चार बाइट्स होगा। पहले तीन बाइट्स में आपका नंबर होता है:

byte b = values[0]; 
byte g = values[1]; 
byte r = values[2]; 
2

उपरोक्त कोड काम करता है। बस एक छोटा सुधार, नीचे बी और आर स्वैप करने की जरूरत है।

byte r = values[0]; 
byte g = values[1]; 
byte b = values[2]; 
+0

सुनील, यह गुफा के पोस्ट पर एक टिप्पणी होनी चाहिए, न कि मूल प्रश्न का उत्तर। यह मुख्य रूप से इसलिए है क्योंकि आपका उत्तर मूल प्रश्न का उत्तर नहीं देता है। – Kevek