Pages: [1]   Go Down
Print
Author Topic: Problema ImageIO.write - colori sfalsati  (Read 1425 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
n2o1988
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 206



« on: 24-01-2009, 20:34:58 »

Salve a tutti. Probabilmente qualcuno di voi ricorderà il problema di cui parlò il prof. Gallo a lezione, riguardante un possibile "errore" di colori sul salvataggio di un immagine tramite ImageIO.write.
Voi come avete risolto (non ricordo bene la soluzione che accennò il prof... riguardava lo scambio di canali mi pare)?
Per esempio, considerando il file AppFrame.java (cartella appIEM_013) della raccolta esempi del prof,  quando apro un immagine, e poi la salvo dal menu File, ottengo SEMPRE un'immagine con i colori sfalsati, come se si "incasinasse" nella gestione dei 4 canali...
Pensavo di aver risolto così (leggendo pareri in giro per i vari forum):
nel metodo private void apri(), ho cambiato
Code:
immagine=new BufferedImage(w,h,BufferedImage.TYPE_INT_ARGB);
in
Code:
immagine=new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);

purtroppo però, mi sono accorto che così facendo, il salvataggio funziona si correttamente, ma non funzionano la maggior parte delle funzioni (in particolare quelle dei menu LUTOp e Scambia R<->G)...
Qualcuno ha risolto diversamente?

PS: quanto detto accade su windows... non ho ancora provato su altri sistemi operativi...
EDIT: su linux da quel che ho visto l'immagine salvata non è visualizzabile, quindi il problema è proprio di java
« Last Edit: 25-01-2009, 02:33:46 by n2o1988 » Logged
n2o1988
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 206



« Reply #1 on: 25-01-2009, 12:33:07 »

Ho risolto, posto qui la soluzione che ho trovato, nel caso servisse ad altri.

1. Nella funzione apri di AppFrame.java ho lasciato creare una BufferedImage con color model TYPE_INT_ARGB.
(in tal modo mi assicuro il funzionamento di tutti i filtri, cosa che non avveniva con la pseudo-soluzione che avevo trovato nel post precedente...)
2. In fase di salvataggio, se si salva in formato jpg (poichè png non da problemi, da quel che ho letto dipende dal fatto che il formato jpg non gestisce correttamente - o non lo gestisce proprio - il canale alpha) creo una BufferedImage di appoggio, sulla quale copierò l'array di valori RGB dei pixel (funzioni get e setRGB come spiegato a lezione dal prof) ma che viene creata con color model TYPE_INT_RGB (niente canale alpha). Ovviamente, come del resto accade anche con i veri editor di immagini, se l'immagine di partenza aveva trasparenze in jpg queste non ci saranno.

Se qualcuno ha trovato altre soluzioni le posti, thanx Wink

Logged
Pages: [1]   Go Up
Print
Jump to: