2012-05-23 25 views
10

उपज नहीं है मैं एक BufferedImage i मिल गया है और मैं अल्फा मूल्य सहित कि imageकी एक निश्चित पिक्सेल से Color प्राप्त करना चाहते हैं। पिक्सेल x और y निर्देशांक का उपयोग करके पहचाना जाता है।bufferedImage.getRGB (एक्स, वाई) अल्फा

यहाँ मैं क्या करने की कोशिश की है:

Color c = new Color(i.getRGB(x, y)); 

किसी कारण से, नए रंग वस्तु सही आरजीबी होता है, लेकिन अल्फा खो जाए।

मैं क्या गलत कर रहा हूं?

अग्रिम

+1

मुझे बिल्कुल यकीन नहीं है कि यह वर्ग कैसे काम करता है, लेकिन आप 'getRGB' नामक फ़ंक्शन का उपयोग कर रहे हैं और फिर आप हैरान हैं कि यह केवल आरजीबी प्राप्त करता है? – murgatroid99

+0

हां यह सच है, लेकिन मैंने पहले जांच की है कि पिक्सेल में getRGB() विधि का उपयोग करके कोई अल्फा मान होता है। http://stackoverflow.com/questions/10419838/how-can-i-find-out-where-a-bufferedimage-has-alpha-in-java – Rapti

+0

मैं देखता हूं। "अल्फा खो जाता है" से आपका क्या मतलब है? – murgatroid99

उत्तर

17

एकल पैरामीटर Color निर्माता आप छोड देता है अल्फा जानकारी का उपयोग कर रहे धन्यवाद। बजाय दो पैरामीटर संस्करण का उपयोग करें और hasalpha के लिए true में पारित:

Color c = new Color(i.getRGB(x, y), true); 

प्रासंगिक Javadoc:

Color(int rgb)

निर्दिष्ट संयुक्त आरजीबी मूल्य से मिलकर साथ एक अपारदर्शी sRGB रंग बनाता है 16-23 बिट्स में लाल घटक, 8-15 बिट्स में हरा घटक, और बिट्स 0-7 में नीला घटक।

Color(int rgba, boolean hasalpha)

बिट्स 24-31, बिट्स 16-23 में लाल घटक, बिट्स 8-15 में हरी घटक है, और में अल्फा घटक से मिलकर निर्दिष्ट संयुक्त RGBA मान के साथ एक sRGB रंग बनाता है 0-7 बिट्स में नीला घटक।

+0

पूरी तरह से काम करता है, धन्यवाद! – Rapti

+0

अच्छी व्याख्या! –

5

अल्फा खो नहीं गया है।

आपको या तो (int, बूलियन) कन्स्ट्रक्टर का उपयोग करना चाहिए जो पिक्सेल जानकारी लेता है और निर्दिष्ट करता है कि इसमें बूलियन या कन्स्ट्रक्टर के साथ अल्फा मान हैं जो 4 मान, लाल, हरा, नीला और अल्फा लेता है।

(int, int, int, int) JavaDoc

से निर्माता जानकारी कोड को छोटा करने के लिए, आप हमेशा Color color = new Color(i.getRGB(x, y), true); जो रंग निर्माता कि पिक्सेल जानकारी करता है बताता है साथ निम्नलिखित कोड के सभी जगह ले सकता है अल्फा मान होता है।

(पूर्णांक, बूलियन) निर्माता से JavaDoc

ध्यान दें कि कभी कभी जब अल्फा को पुन: प्राप्त जानकारी निम्नलिखित तरीके -1 वापस कर सकती है, ऐसी स्थिति में इसका मतलब है इसे वापस करने के लिए 255 लूप होता है, ताकि आप 256- करनी होगी वास्तविक अल्फा मान प्राप्त करने के लिए 1। यह स्निपेट दर्शाता है कि एक छवि को कैसे लोड किया जाए और कुछ निश्चित निर्देशांकों पर उस छवि का रंग प्राप्त करें, इस मामले में, 0,0। निम्नलिखित उदाहरण आपको अल्फा समेत प्रत्येक रंग मान को पुनर्प्राप्त करने और इसे नए रंग में पुनर्निर्मित करने का तरीका दिखा सकता है।

import java.awt.Color; 
import java.awt.image.BufferedImage; 
import java.io.IOException; 
import java.net.MalformedURLException; 
import java.net.URL; 

import javax.imageio.ImageIO; 

public class main { 

    public static void main(String [] args){ 
     BufferedImage image = null; 
     try { 
      image = ImageIO.read(new URL("image.png")); 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     int pixel = image.getRGB(0, 0); 

     int alpha = (pixel >> 24) & 0xff; 
     int red = (pixel >> 16) & 0xff; 
     int green = (pixel >> 8) & 0xff; 
     int blue = (pixel >> 0) & 0xff; 

     Color color1 = new Color(red, green, blue, alpha); 

     //Or use 
     Color color2 = new Color(image .getRGB(0, 0), true); 

    } 
    } 

BufferedImages getRGB (int, int) JavaDoc के रूप में यह कहते हैं जैसा कि आप देख सकते हैं:

Returns an integer pixel in the default RGB color model (TYPE_INT_ARGB) and default sRGB colorspace. Color conversion takes place if this default model does not match the image ColorModel. There are only 8-bits of precision for each color component in the returned data when using this method.

जो अल्फा मूल्य भी लिया गया है इसका मतलब है।

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