2011-01-14 10 views
2

Ich habe ein Bild (gif oder png) mit einigen transparenten Teile, die in schwarz erscheinen, wenn sie in einem JLabel.transparente Teile von GIF/PNG Bild in schwarz in einem JLabel Java

ClassLoader cl = this.getClass().getClassLoader(); 
    ImageIcon img = new ImageIcon(cl.getResource("resources/myPicture.png")); 
    label = new JLabel(img); 

Wie kann ich dieses Problem umgehen?

Ich brauche das JLabel nicht, vielleicht gibt es eine bessere Möglichkeit, das Bild korrekt (d. H. Mit der Transparenz) direkt auf einem JPanel anzuzeigen?

Dank David

+1

Sie sicher

David hinzugefügt, dass die JLabel Schuld ist, dass das Bild nicht transparent oder das ist die Hintergrund ist nicht schwarz? Soweit ich die Dinge verstehe, sollte das, was Sie wünschen, für ein Bild in einem JLabel funktionieren. –

+0

Das Bild * ist * transparent und wird beispielsweise in einem Browser korrekt angezeigt. – dm76

+1

@Hovercraft: Ich denke du meintest "Bild * ist * transparent". –

Antwort

10

Den Schuldigen gefunden! me

Eigentlich ist das Bild, bevor neu skaliert immer an die JLabel hinzugefügt wird und für das verwendete ich BufferedImage.TYPE_INT_RGB statt BufferedImage.TYPE_INT_ARGB

Ich glaube wirklich nicht, dass die Neuskalierungsmethode dies ändern könnte (albern !), das ist, warum ich es nicht im Code zeigen, habe ich auf die Frage ...

+1

Danke für die Veröffentlichung der Lösung, um das Geheimnis zu lösen! Offensichtlich hätte keiner von uns es herausfinden können, es sei denn, Sie hatten zu Beginn eine SSCCE veröffentlicht (ähnlich wie in meinem Beispiel oben), etwas, das Sie für zukünftige Probleme im Hinterkopf behalten sollten –

4

Auch hier sind Sie sicher, dass es die Schuld des JLabel ist? Als ich versuchte, ein Proof-of-Concept-Programm zu machen, funktionierte alles gut - der Hintergrund JPanels rosa Farbe war zu sehen. z.B.

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; 
import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

public class TransparentJLabel { 
    private static final String IMAGE_PATH = "http://duke.kenai.com/Oracle/OracleStratSmall.png"; 

    private static void createAndShowUI() { 
     JPanel panel = new JPanel(); 
     panel.setBackground(Color.pink); 

     URL imageUrl; 
     try { 
      imageUrl = new URL(IMAGE_PATH); 
      BufferedImage image = ImageIO.read(imageUrl); 
      ImageIcon icon = new ImageIcon(image); 
      JLabel label = new JLabel(icon); 
      panel.add(label); 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 


     JFrame frame = new JFrame("TransparentJLabel"); 
     frame.getContentPane().add(panel); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowUI(); 
      } 
     }); 
    } 
} 

können Sie wünschen sich ein ähnliches Programm zu erstellen, um zu sehen, ob und wo Ihr Problem ist, und es dann hier posten.

+0

danke, das hat mir geholfen, den Schuldigen zu finden (siehe meine eigene Antwort) – dm76