2012-08-20 12 views
6

Sto creando un'interfaccia utente utilizzando Swing e voglio visualizzare un'immagine in un JLabel. Il codice che uso è la seguente:Toolkit.getDefaultToolkit(). CreateImage() vs ImageIO.read()

JLabel label = new JLabel(new ImageIcon(ImageIO.read(new File("img.jpg")))); 

Questo funziona bene se uso png immagini, ma quando si tratta di jpg (solo alcuni di essi), ottengo un'immagine rossiccio (uno diverso da quello che vedo in Paint.NET). L'immagine che ho usato è questa: img.jpg

così ho cercato (in alternativa):

Toolkit.getDefaultToolkit().createImage(new File("img.jpg").getAbsolutePath()); 
  1. Qualcuno ha un'idea del perché questo accada? È un formato speciale JPEG che non è supportato?
  2. Ho letto su questo forum che molte persone consigliano di utilizzare ImageIO (here per esempio). Perché?

Grazie mille

+1

L'alternativa ha funzionato? – ShiDoiSi

+2

Sì, sì. Ecco perché mi chiedo perché la gente consiglia l'altro modo ... –

+1

Aspetta, non riesco a trovare alcun 'createImage (File f)' nei documenti Java Toolkit ... sicuro? – ShiDoiSi

risposta

7

Come discusso here, l'immagine JPEG può contenere informazioni false di trasparenza. Un semplice espediente consiste nel rendere l'immagine in un buffer con un modello di colore compatibile, come mostrato in here.

+1

Vedi anche ['createCompatibleImage()'] (http://docs.oracle.com/javase/6/docs/api/ java/AWT/GraphicsConfiguration.html). – trashgod

5

Sembra aver trovato un bug in ImageIO.read ... (posso riprodurre la tinta rossa, e non è assolutamente come dovrebbe essere simile).

Si può cercare di

  • salvare i file JPEG con altre impostazioni
  • aperto/ri-salvare il file con altri programmi (sperando di ottenere un JPEG-codifica più comune)
  • o l'uso il metodo Toolkit (se non controlli le immagini).

L'unico problema con il metodo Toolkit è che il metodo getImage() restituisce immediatamente dopo che è stato richiamato e il caricamento avviene su un thread in background, quindi non è possibile iniziare immediatamente a lavorare con l'oggetto Immagine.

Problemi correlati