2011-01-10 19 views
5

को अनदेखा करता है ऐसा लगता है कि ImageIO.read के साथ लोड किया गया पीएनजी अल्फा चैनल को अनदेखा करता है। (मैंने जेआरई 6 अपडेट 20 के साथ प्रयास किया)ImageIO पीएनजी अल्फा चैनल

बग?

उदाहरण:

public class Test extends JFrame 
{ 

public Test() 
{ 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    JButton b = new JButton("Test"); 
    try 
    { 
     b.setIcon(new ImageIcon(ImageIO.read(new File("D:\\image.png")))); 
    } 
    catch (IOException e2) 
    { 
    } 
    b.addActionListener(new ActionListener() 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
     } 
    }); 
    getContentPane().add(b, BorderLayout.CENTER); 
    setSize(500,500); 
    setVisible(true); 
} 

/** 
* @param args 
*/ 
public static void main(String[] args) 
{ 
    new Test(); 
} 

}

+1

इस व्यवहार को प्रदर्शित करने वाले कट-डाउन एप्लिकेशन को पोस्ट करने के बारे में कैसे? –

+0

संभावित रूप से [buffered छवि का उपयोग किये बिना अल्फा चैनल के साथ जावा छवियों] से संबंधित है [http://stackoverflow.com/q/2273730/448455)। –

+0

कोड उदाहरण जोड़ा गया – Arutha

उत्तर

1

आप Sixlegs Java PNG Decoder उपयोग कर सकते हैं, यह अल्फा पारदर्शिता बग नहीं है। संदर्भ के लिए, Sun Java Bug #6371389 पीएनजी अल्फा चैनलों के साथ एक समान समस्या के बारे में बात करता है।

5

आप कैसे जानते हैं कि यह अल्फा चैनल को अनदेखा करता है।

enter image description here

कोड:: नीचे दिए गए कोड इस स्क्रीनशॉट का उत्पादन

public static void main(String[] args) throws Exception { 

    URL url = new URL("http://upload.wikimedia.org/" + 
        "wikipedia/commons/4/47/PNG_transparency_demonstration_1.png"); 
    Image image = ImageIO.read(url); 

    JPanel bgPanel = new JPanel(new BorderLayout()) {{ 
      setOpaque(false); 
     } 
     protected void paintComponent(Graphics g) { 
      Rectangle r = g.getClipBounds(); 
      // paint bg 
      int s = 10; 
      for (int y = r.y/s; y < r.y + r.height; y += s) { 
       int o = (y % (2*s) == 0 ? s : 0); 
       for (int x = r.x/s + o; x < r.x + r.width; x += 2*s) 
        g.fillRect(x, y, s, s); 
      } 
      super.paintComponent(g); 
     } 
    }; 

    bgPanel.add(new JLabel(new ImageIcon(image)) {{ 
     setOpaque(false); 
    }}); 

    JFrame frame = new JFrame("Test"); 
    frame.add(bgPanel); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(350, 300); 
    frame.setVisible(true); 
} 
2

मेरे अनुभव के माध्यम से - JDK 1.6.0_21, जावा ImageIO png विकोडक के साथ परीक्षण किया पारदर्शिता आंशिक रूप से समर्थन करता है। यह एक अतिरिक्त अल्फा चैनल (पूरी तरह से 32-बिट प्रति पिक्सेल) के साथ 24-बिट पूर्ण रंगीन छवि का समर्थन करता है, साथ ही साथ टीआरएनएस ट्रंक के साथ अनुक्रमित रंगीन छवि भी शामिल है जिसमें अल्फा मानचित्र शामिल होता है जिसे मौजूदा रंग के आरजीबी रंग पैलेट के साथ जोड़ा जा सकता है ताकि यह निर्धारित किया जा सके कि कौन सा रंग पारदर्शी है। लेकिन यह एक टीआरएनएस ट्रंक के साथ 24-बिट आरजीबी का समर्थन नहीं करता है जिसमें छवि के लिए एक पारदर्शी आरजीबी रंग मान शामिल है। शायद आपकी छवि ऐसे प्रारूपों में से एक है जो छवियों द्वारा समर्थित नहीं हैं।

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