जावा / एंड्रॉइड रंग इंट के अल्फा बाइट्स को हेरफेर करें


82

अगर मेरे पास जावा में एक इंट है जो मैं एंड्रॉइड रंग (कैनवस पर ड्राइंग के लिए) के रूप में उपयोग कर रहा हूं, तो मैं उस इंट के सिर्फ अल्फा घटक को कैसे हेरफेर कर सकता हूं? उदाहरण के लिए, मैं यह करने के लिए एक ऑपरेशन का उपयोग कैसे कर सकता हूं:

int myOpaqueColor = 0xFFFFFF;
float factor = 0;
int myTransparentColor = operationThatChangesAlphaBytes(myOpaqueColor, factor);
//myTransparentColor should now = 0x00FFFFFF;

आदर्श रूप से, उन पहले बाइट्स को जो भी factorहो, गुणा करना अच्छा होगा , बाइट्स को स्थिर मूल्य पर सेट करने के बजाय।

जवाबों:


176

रंग वर्ग की जाँच करें ।

आपका कोड कुछ इस तरह दिखाई देगा।

int color = 0xFFFFFFFF;
int transparent = Color.argb(0, Color.red(color), Color.green(color), Color.blue(color));

तो इसे एक विधि में लपेटने से ऐसा लग सकता है:

@ColorInt
public static int adjustAlpha(@ColorInt int color, float factor) {
    int alpha = Math.round(Color.alpha(color) * factor);
    int red = Color.red(color);
    int green = Color.green(color);
    int blue = Color.blue(color);
    return Color.argb(alpha, red, green, blue);
}

और फिर इसे पारदर्शिता सेट करने के लिए कॉल करें, मान लें कि 50%:

int halfTransparentColor = adjustAlpha(0xFFFFFFFF, 0.5f);

मुझे लगता है कि प्रदान किए गए रंग वर्ग का उपयोग करना थोड़ा अधिक स्व-दस्तावेजीकरण है जो सिर्फ थोड़ा सा हेरफेर कर रहा है, साथ ही यह आपके लिए पहले से ही किया गया है।


47
ColorUtils.setAlphaComponent()ठीक यही करता है
पैट्रिक फेवर

12
आप सही हैं कि ColorUtilsअब यह सही तरीका है, लेकिन जब मैंने यह उत्तर लिखा था तो वह वर्ग मौजूद नहीं था।
मेजोरमाजर्स



39

एक विकल्प है:

int myOpaqueColor = 0xffffffff;
byte factor = 20;// 0-255;
int color = ( factor << 24 ) | ( myOpaqueColor & 0x00ffffff );

या फ्लोट का उपयोग करना:

int myOpaqueColor = 0xffffffff;
float factor = 0.7f;// 0-1;
int color = ( (int) ( factor * 255.0f ) << 24 ) | ( myOpaqueColor & 0x00ffffff);

आप किसी भी चैनल को बिट वाइज मान बदलकर बदल सकते हैं 24

public final static byte ALPHA_CHANNEL = 24;
public final static byte RED_CHANNEL   = 16;
public final static byte GREEN_CHANNEL =  8;
public final static byte BLUE_CHANNEL  =  0;

// using:
byte red   = 0xff;
byte green = 0xff;
byte blue  = 0xff;
byte alpha = 0xff;
int color = ( alpha << ALPHA_CHANNEL ) | ( red << RED_CHANNEL ) | ( green << GREEN_CHANNEL ) | ( blue << BLUE_CHANNEL );// 0xffffffff

1

यह सीधे सवाल का जवाब नहीं दे रहा है, लेकिन यह याद रखना अच्छा है कि व्यू और ड्रॉएबल में सेटअल्फा (फ्लोट अल्फा) विधि है जो कि आप जो चाहते हैं वह कर सकते हैं। या आप view.getBackground ()। SetAlpha () को आज़माना चाहते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.