Newsgroup: it.comp.java
Titolo: Salvare bufferedImage (colori sfasati)

Salve, purtroppo mi trovo nella situazione di dover richiedere
aiuto:
devo salvare una bufferedImage in un file JPEG, e lo faccio con questo
semplice codice:
ImageWriter writer = null;
Iterator iter = ImageIO.getImageWritersByFormatName("jpg");
writer = (ImageWriter)iter.next();
try {
   ImageOutputStream ios = ImageIO.createImageOutputStream(new 
File("/home/kows/aaa.jpg"));
       writer.setOutput(ios);
       ImageWriteParam iwparam = new 
JPEGImageWriteParam(Locale.getDefault());
       IIOMetadata meta = writer.getDefaultStreamMetadata(iwparam);
       writer.write(meta, new IIOImage(compressedImage, null, null), 
iwparam);
       ios.flush();
       writer.dispose();
       ios.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
Ho provato in vari altri modi, ma il problema è sempre lo stesso:
l'immagine viene salvata ma i colori appaiono totalmente sfasati...credo 
abbia a
che fare con il salvataggio dei metadati, ma le mie poche conoscenze non mi
aiutano in merito :(((
Qualcuno può, gentilmente, aiutarmi?
Grazie a tutti!
Gabriele

 Gabriele

 errori"...
magari è una stupidata ma hai provato a usare un'altra immagine??
oppure prova ad aprirla prima con un altro programma per la
manipolazione delle immagini, salvane una copia e poi riprova aprendo
la copia appena creata
Ciao Marco

 magari è una stupidata ma hai provato a usare un'altra immagine??
Si purtroppo fa lo stesso lavoro :(
È come se al salvataggio dell'immagine aggiungesse un livello blu 
trasparente
sopra l'immagine, e di conseguenza tutti i colori sotto appaiono falsati...
se per esempio apro un'immagine che è un quadrato bianco, al salvataggio 
me lo
trovo blu :(
grazie comunque!

 l'immagine viene salvata ma i colori appaiono totalmente sfasati...
dopo una lunga serie di bestemmie, mi sono armato di pazienza e ho trovato
questo:
compressedImage = new BufferedImage(image.getWidth(null), 
image.getHeight(null), BufferedImage.TYPE_INT_ARGB)
la colpa era in quel TYPE_INT_ARGB che una volta trasformato in TYPE_INT_RGB
ha messo tutto in ordine!
Buon pomeriggio a tutti!
G.


Ho visto che usi il formato jpg, è un formato con copressione, ti fa
perdere dei dettagli, forse usando un altro formato tipo tif che è cmq
un formato con compressione ma il processo è reversibile nel senso che
la i dettagli compressi si possono recuperare, ma una immagine salvata
jpg perde per sempre i suoi dettagli.
L'ho buttata cosi, non conosco le api che gestiscono le immagini in
java.

 ha messo tutto in ordine!
la butto lì. il JPEG non prevede il canale ALPHA (la trasparenza)
chissà, magari la tua applicazione scambia le bande (anche se mi sembra
improbabile).
Anch'io ci sto sbattendo il muso, anzi se qualcuno ha qualche riferimento su
come gestire correttamente i vari TYPE_*, gliene sarei grato, il java tutorial
sull'argomento è sintetico al limite dell'omertà.
Ad esempio ho verificato che un operazione di setSamples(...) su un
WritableRaster istanziato in toni di grigio richiede comunque un valore per la
banda, benchè ne abbia una sola, purchè sia 0, altrimenti restituisce un
eccezione di OutOfBounds. 
-- 
                     Dona i tuoi cicli di clock alla ricerca!
 
http://boinc.berkeley.edu/
                          --------------------
           - Come si chiama un polipo con un solo tentacolo?
           - Monopo.

 sull'argomento è sintetico al limite dell'omertà.
Esatto e' proprio quello: il formato jpg non supporta la trasparenza,
quindi l'immagine viene creata corrotta.
I vari TYPE_ sono strettamente legati al formato del file che vuoi
creare, per questo non trovi molte informazioni nei javadocs, che si
limitano a definire il significato di ogni tipo di codifica.
--
SoulSpirit