2011-12-12 11 views
8

मैं एक आरजीबी रंग मान को केवल सादा दशमलव में कैसे परिवर्तित करूं?एक आरजीबी रंग मान को दशमलव तक बदलें

तो मेरे पास है: आरजीबी (255,255,255) सफेद है
इसकी दशमलव बराबर है: 16777215

मैं सोच यह सिर्फ हो सकता है की कोशिश की है:

var dec = r*g*b; // but this doesn't work 

हालांकि वह काम नहीं करता।

कोई भी आरजीबी (या आरजीबीए) से दशमलव में कनवर्ट करने के लिए एल्गोरिदम/समीकरण के बारे में जानता है?

+2

16,777,215 आपके आरजीबी (255,255,255) के हेक्स संस्करण, 0x00FFFFFF के दशमलव समतुल्य दशमलव है। –

+0

आप इन मूल्यों के साथ क्या करने की योजना बना रहे हैं? आपने उन्हें किस सॉफ़्टवेयर/फ़ंक्शंस/आदि के लिए दिया है? –

+0

मेरे पास फ्लैश एप्लिकेशन से कलर वैल्यू हैं, जो दशमलव में हैं और मुझे उन्हें HTML/css में प्रदर्शित करने की आवश्यकता है और वीजा-वर्मा को भी रूपांतरित करना है। –

उत्तर

10

आरजीबी पूर्णांक को आम तौर पर तीन विशिष्ट बाइट्स के रूप में माना जाता है जहां बाएं सबसे अधिक (उच्चतम क्रम) बाइट लाल होता है, मध्य बाइट हरा होता है और दाएं सबसे अधिक (निम्नतम क्रम) बाइट नीला होता है । आप इस तरह इन अलग-अलग बाइट्स के मूल्यों को पुनः प्राप्त कर सकते हैं:

var c = 0xff03c0; // 16712640 
var components = { 
    r: (c & 0xff0000) >> 16, 
    g: (c & 0x00ff00) >> 8, 
    b: (c & 0x0000ff) 
}; 

आप उसके घटकों से एक रंग बाइट्स में वापस स्थानांतरण द्वारा फिर से बना सकते हैं:

c = (components.r << 16) + (components.g << 8) + (components.b); 

आपके मामले में, बस स्थानापन्न components.r (आदि) अपने वास्तविक चर के साथ।

3
var dec = (b & 0xff) << 16 + (g & 0xff) << 8 + (r & 0xff); 

(मुझे लगता है कि आर, जी, बी मूल्यों के लिए सही क्रम है)

अद्यतन

मैं सिर्फ ब्राउज़र अनुप्रयोगों के लिए जाँच की और मैं आदेश गलत है, तो सही ब्राउज़रों (HTML + सीएसएस + जावास्क्रिप्ट पढ़ें) के लिए सूत्र है:

var dec = r << 16 + g << 16 + b; 

मान लिया जाये कि आर, जी, बी महत्व देता < = 255

अन्य एपीआई आर, जी, बी मानों के लिए एक अलग आदेश की उम्मीद कर सकते हैं। मुझे कम से कम एक याद रखना प्रतीत होता है जिसने ऑर्डर को उलट दिया है (मेरे मूल उत्तर के अनुसार), लेकिन मुझे लगता है कि इस समय यह कौन सा है।

+0

आप आदेश के बारे में सही हो सकते हैं, इस मामले में, मेरा जवाब गलत है :( –

+0

क्या है? के लिए सही क्रम? किसके लिए आदेश इस बात पर निर्भर करता है कि मूल्य * कौन सा * पढ़ रहा है। –

+0

@ निकोल - नहीं, सही क्रम एपीआई पर निर्भर करता है। मुझे Win32 एपीआई के बारे में निश्चित नहीं है, लेकिन ब्राउज़र आधारित अनुप्रयोगों के लिए (जो मुझे लगता है कि यहां संबोधित किया जा रहा है) मुझे पूरा यकीन है कि ब्लू हाई ऑर्डर बाइट (तीनों में से) है और लाल कम ऑर्डर बाइट है। –

0

आप 16 से आर बाएं शिफ्ट करने के लिए की जरूरत है, जी बी करने के लिए 8 और या दोनों द्वारा छोड़ा बिट्स के रूप में मूल्यों को देखो और सभी स्पष्ट हो जाएगा:

आर 255 = 11111111B जी 255 = 11111111B बी 255 = 11111111B

शिफ्ट आर 16: 111111110000000000000000 शिफ्ट जी 8: 000000001111111100000000

या बी में: 111111111111111111111111

Conve आरटी से दशमलव: 16777215

1
if (color.substr(0, 1) === '#') { 
    return color; 
} 
var digits = /(.*?)rgb\((\d+), (\d+), (\d+)\)/.exec(color); 
var red = parseInt(digits[2]); 
var green = parseInt(digits[3]); 
var blue = parseInt(digits[4]); 
var rgb = blue | (green << 8) | (red << 16); 
return rgb.toString(10); 
+1

rgb.toString (10) –

5

एक बहुत बेहतर जवाब (स्पष्टता के संदर्भ में) यह है:

'Convert RGB to LONG: 
LONG = B * 65536 + G * 256 + R 

'Convert LONG to RGB: 
B = LONG \ 65536 
G = (LONG - B * 65536) \ 256 
R = LONG - B * 65536 - G * 256 

तक अपने लंबे पूर्णांक (दशमलव) आप बनाना चाहते है। आसान हुह? निश्चित रूप से, बिट्सफ़िफ्ट

+1

की आवश्यकता है मुझे लगता है कि बिट शिफ्ट अधिक स्पष्ट है। –

+0

@ डैनियलए। व्हाइट ऐसा नहीं सोच सकता है, लेकिन मैं नहीं देख सकता कि इस सवाल का कोई अन्य जवाब इस के रूप में कितना स्पष्ट है। यहां तक ​​कि मैं इसे समझ सकता हूं। –

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