2011-06-26 13 views
8

मुझे जावा में रंग बदलने के साथ एक समस्या है। सरलीकृत समस्या निम्न की तरह दिखती है:आरजीबी में अंतर्निहित रंग के साथ आरजीबीए ट्रांसफॉर्म करें?

मेरे एप्लिकेशन में एक छवि है। मैंने इस छवि पर एक उलझन डाला है। आयताकार का रंग नया रंग (255, 255, 0, 80) के रूप में परिभाषित किया जाता है।

क्या संभवतः बिना getPixelColor() - विधि के बिना अल्फा-वैल्यू के बिना रंग में स्क्रीन पर दिखाए गए रंग की गणना/रूपांतरण करना संभव है? अलग-अलग तैयार: क्या मैं अल्फा-वैल्यू + अंतर्निहित रंग वाले रंग से अल्फा-वैल्यू के बिना रंग की गणना कर सकता हूं?

मुझे आशा है कि कोई मेरी मदद कर सकता है।

सादर, माइकल

+0

संक्षिप्त उत्तर: "हां"। संभावित रूप से उपयोगी पढ़ने [अल्फा कंपोस्टिंग] (http://en.wikipedia.org/wiki/Alpha_compositing) –

उत्तर

7

बस Wikipedia article राज्यों (अपारदर्शी पृष्ठभूमि यह सोचते हैं) के रूप में:

int r, g, b; 
r = fgColor.getRed() * fgColor.getAlpha() + bgColor.getRed() * (255 - fgColor.getAlpha()); 
g = fgColor.getGreen() * fgColor.getAlpha() + bgColor.getGreen() * (255 - fgColor.getAlpha()); 
b = fgColor.getBlue() * fgColor.getAlpha() + bgColor.getBlue() * (255 - fgColor.getAlpha()); 
Color result = new Color(r/255, g/255, b/255); 

अस्वीकरण: इस परीक्षण नहीं किया है, लेकिन यह काम करना चाहिए।

यदि अग्रभूमि रंग स्थिर है (जैसे एक भरे पारदर्शी आयताकार), तो आप fgColor.getComponent() * fgColor.getAlpha() और (255 - fgColor.getAlpha()) प्रीकंप्यूटिंग द्वारा बहुत अनुकूलित कर सकते हैं।

+0

टिप्पणी और कोड के लिए बहुत बहुत धन्यवाद। यह वास्तव में ठीक काम करता है :) – Michael

+0

@ माइकल: यह सुनकर खुशी हुई :) –

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