2015-10-12 5 views
5

मेरे पास एक ऐसा फ़ंक्शन है जो रंग दिया जाता है और मैं इसे रंग को अंधेरा करना चाहता हूं (इसकी चमक को 20% या उससे कम कर दें)। मैं यह नहीं समझ सकता कि यह सिर्फ एक रंग (int) दिया गया है। उचित दृष्टिकोण क्या है?किसी दिए गए रंग को अंधेरा कैसे करें (int)

public static int returnDarkerColor(int color){ 
    int darkerColor = .... 
    return darkerColor; 
} 

उत्तर

22

यह ऐसा करने का एक अधिक एंड्रॉयड रास्ता:

public static int manipulateColor(int color, float factor) { 
     int a = Color.alpha(color); 
     int r = Math.round(Color.red(color) * factor); 
     int g = Math.round(Color.green(color) * factor); 
     int b = Math.round(Color.blue(color) * factor); 
     return Color.argb(a, 
       Math.min(r,255), 
       Math.min(g,255), 
       Math.min(b,255)); 
    } 

आप एक कारक 1.0f से भी कम समय अंधेरा करने के लिए उपयोग करना चाहते हैं जाएगा। 0.8f आज़माएं।

+0

की एक अंधेरे छाया में अपना शीर्षक पट्टी सेट करने के लिए प्रयुक्त यह निर्दोष रूप से काम करता है। धन्यवाद! – NSouth

3

, एक HSV array करने के लिए रंग कन्वर्ट तो 20% से चमक को कम करने, तो एचएसवी सरणी वापस आरजीबी को HSVToColor साथ परिवर्तित। नोट: आप जिस मान को सरणी में बदलना चाहते हैं वह V -value होगा। (यानी, hsv[2])

6

यदि आप अधिक सरल और सटीक नहीं चाहते हैं, तो नीचे आपकी मदद कर सकता है।

public static int returnDarkerColor(int color){ 
    float ratio = 1.0f - 0.2f; 
    int a = (color >> 24) & 0xFF; 
    int r = (int) (((color >> 16) & 0xFF) * ratio); 
    int g = (int) (((color >> 8) & 0xFF) * ratio); 
    int b = (int) ((color & 0xFF) * ratio); 

    return (a << 24) | (r << 16) | (g << 8) | b; 
} 
+0

** 1। ** आप सही हैं। मैं सिर्फ शो मूल्य 0.2 एफ चाहता हूँ। ** 2, 3। ** यह मेरी गलती है। मैंने अभी टाइप किया है। फिक्सिंग के लिए धन्यवाद। –

+0

यह ठीक से काम करता है और स्वीकार किए गए उत्तर – Shyri

+0

से अधिक कुशल है। एक्शन बार –

3

एक अधिक आसान समाधान RogueBaneling तरह एचएसवी का उपयोग कर सुझाव:

@ColorInt int darkenColor(@ColorInt int color) { 
    float[] hsv = new float[3]; 
    Color.colorToHSV(color, hsv); 
    hsv[2] *= 0.8f; 
    return Color.HSVToColor(hsv); 
} 

कोई जटिल बिटवाइज़ संचालन या Math आवश्यक। यदि आवश्यक हो तो 0.8f को तर्क के लिए ले जाएं।

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