2016-07-19 16 views
1

Ich habe einige Sachen mit Bildern in JLabel s gemacht, und ich bemerkte, dass einige der Bilder (diejenigen, die schwarz enthielten) heller in der Beschriftung als sie angenommen wurden sein. Die Bilder wurden durch ImageIO#read(File) geladen. Bilder, die durch ImageIcon Konstruktoren geladen werden, sehen normal aus.Die Verwendung von ImageIO.read gibt ein modifiziertes Bild

Hier ist ein kleiner Test, dass ich zusammen für dieses Bild warf:

Test image

JFrame frame = new JFrame(); 
frame.setLayout(new FlowLayout()); 
frame.setSize(320, 320); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

URL imageURL = new URL("https://wiki.factorio.com/images/Crude-oil.png"); 

frame.add(new JLabel(new ImageIcon(ImageIO.read(imageURL)))); 

frame.add(new JLabel(new ImageIcon(imageURL))); 

frame.setVisible(true); 

Das Ergebnis:

Result

Irgendwelche Ideen, warum dies passiert sein könnte?

Antwort

2

Dies ist eine bekannte bug und es tritt auf, wenn ImageIO.read() nicht das richtige Farbmodell eines Bildes finden kann.

Im Gegensatz dazu zeigt der Konstruktor ImageIcon(Url) das Bild ordnungsgemäß an, während es das Bild unter Verwendung Toolkit.getDefaultToolkit().getImage(Url) abruft.

Dieser Fehler kann auch bei anderen Bild-Erweiterungen auftreten. Siehe this.

EDIT

Scroll down und vergleichen Sie die Farbe Typ im PNG Abschnitt aus der untenstehenden Links.

http://regex.info/exif.cgi?imgurl=https://wiki.factorio.com/images/Crude-oil.png

http://regex.info/exif.cgi?imgurl=http://www.sherv.net/cm/emoticons/hand-gestures/victory-fingers-black-smiley-emoticon.png

Sie werden sehen, dass sowohl die Farbtypen unterschiedlich sind neben beiden Bilder PNGs zu sein. Das Problem mit ImageIO.read() ist, dass es RGB mit Alpha richtig lesen kann, aber nicht Graustufen mit Alpha.

Ich fand auch, dass ImageIO.read().getType() 0 = TYPE_CUSTOM für das erste Bild und 6 = TYPE_4BYTE_ABGR für die zweite zurückgibt. TYPE_CUSTOM wird normalerweise für Bilder zurückgegeben, deren Typ nicht erkannt wird.

+0

Danke; Interessant, dass beide Ihrer Links (der Bug und andere Antworten) JPEGs referenzieren, während meiner eine PNG ist. – ricky3350

+1

Tut mir leid, ich konnte keine Referenz zu PNG finden, aber ich habe jetzt etwas Interessantes gefunden. Bitte überprüfen Sie die Bearbeitung. –

+0

Auch interessant; Ich schätze die zusätzliche Forschung sehr. Ich fürchte, ich kann nicht wieder aufladen, oder ich würde es tun. – ricky3350