Autore Topic: Problema con un immagine sottoforma di ImageIcon  (Letto 1332 volte)

Offline Albe85

  • Utente junior
  • **
  • Post: 102
  • Respect: +1
    • Mostra profilo
Problema con un immagine sottoforma di ImageIcon
« il: 27 Ottobre 2010, 18:48:19 CEST »
0
Buonasera a tutti!
Ho un problema. Mi spiego.
Io ho un database postgresql su un server dal quale prelevo e serializzo via xml alcuni oggetti contenenti anche un'immagine.
L'immagine è del tipo ImageIcon.
Il tutto viene poi serializzato su un file xml che produce il seguente risultato (un articolo - Ne metto uno solo ma in realtà ho tutta una lista):
Codice (XML): [Seleziona]
 <?xml version="1.0" encoding="UTF-8" ?>
- <java>
- <object name="agenda.bean.ArticoloBean">
- <Nome>
  <String>Sale</String>
  </Nome>
- <NonCibo>
  <boolean>false</boolean>
  </NonCibo>
- <Id>
  <int>0</int>
  </Id>
- <Image>
  <imageicon>/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2/ZFNRsBzlvoNxJhrhhGh6Bev41rQaTaW3KRh29TVwnknvTc85qgAimnigmmk0wFJophNFAE+2mng0UUAITgUwuaKKAEzmmEEdDRRTAaH2rkZzTg5KbizZoopANM5PTH4qDUMqRzcSRRP/vIKKKAHRRxQfcjRP9xAKtxxneRkEY7iiimBKgzyMA089KKKAIietMzzRRSAaTSZoooAQmiiigD/2Q==
</imageicon>
  </Image>
- <Changed>
  <boolean>false</boolean>
  </Changed>
  </object>

Il tag imageicon contiene una stringa codificata in modo da poter serializzare l'immagine ImageIcon che mi dava problemi di serializzazione. Il metodo di codifica praticamente converte l'immagine in una stringa. Poi utilizzando il metodo di decodifica sotto riportato mi ricostruisco l'ImageIcon.
 Con i seguenti metodi mi codifico e decodifico l'imageicon:
Codice (Java): [Seleziona]
public String Encoder64Image() {       
                String provaimg = new String(Base64Coder.encode(ImageUtility.Image2Bytes(image)));
                return provaimg;
        }
       
public ImageIcon Decoder64Image(String sin) {  
        char[] chars = sin.toCharArray();
        byte[] provaimg2 = (Base64Coder.decode(chars,0,chars.length));
        return new ImageIcon(provaimg2);
}


Ora io ho fatto un parser lato android (non server) per poter prelevare i dati dal file xml via http e inserirli in un database SQLite in android per poi visualizzarli in una lista.
Tac mi sono accorto che android non supporta gli ImageIcon e quindi anche se dalla stringa immagine mi recupero l'ImageIcon con il metodo di decodifica sopra riportato non posso fare nulla.

Qualcuno sa come posso gestire ed aggirare il problema di modo da riuscire a visualizzare l'immagine lato android e memorizzarla nel
DB SQLite e poi visualizzarla nella listview???
Vi ringrazio.
Spero di essere stato chiaro. Se non avete capito scrivetemelo pure.
Ciao.
« Ultima modifica: 27 Ottobre 2010, 18:50:30 CEST da Sangio85 »

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Problema con un immagine sottoforma di ImageIcon
« Risposta #1 il: 28 Ottobre 2010, 10:54:15 CEST »
0
Io non salverei la stringa base64 nel db, è piuttosto onerosa maneggiarla.
Quello che farei io è prendere il base64, creare un file immagine corrispondente e salvarmi nel db l'uri di questo file.

Offline Albe85

  • Utente junior
  • **
  • Post: 102
  • Respect: +1
    • Mostra profilo
Re:Problema con un immagine sottoforma di ImageIcon
« Risposta #2 il: 28 Ottobre 2010, 11:14:13 CEST »
0
E' quello che avrei intenzione di fare solo che non so come crearmi il file immagine dal base64.
Riesci a darmi due righe di codice di input...ti ringrazio Ricky!

Il mio problema è che una volta che decodico la stringa con il base64decoder mi ritorna indietro un oggetto di tipo ImageIcon che non è gestibile lato android. E' quello che mi blocca.
« Ultima modifica: 28 Ottobre 2010, 11:20:17 CEST da Sangio85 »

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Problema con un immagine sottoforma di ImageIcon
« Risposta #3 il: 28 Ottobre 2010, 11:20:38 CEST »
+1
Codice (Java): [Seleziona]
byte[] bytes = decodifichi la tua stringa
ByteArrayInputStream imageStream = new ByteArrayInputStream( bytes );
Bitmap b = BitmapFactory.decodeStream( imageStream );

poi con questo metodo puoi salvarla su file
Codice (Java): [Seleziona]
        public Uri saveBitmapAsJPEG ( Bitmap b, String path, String name ) {
                // Create temp dir if needed
                File directory = new File( path );
                directory.mkdirs();

                // save file
                OutputStream fOut = null;
                File file = new File( path, name );

                try {
                        fOut = new FileOutputStream( file );
                }
                catch ( FileNotFoundException e ) {
                        Log.e( LOG_TAG, e.getMessage() );
                        return Uri.EMPTY;
                }

                b.compress( Bitmap.CompressFormat.JPEG, 85, fOut );

                try {
                        fOut.flush();
                        fOut.close();
                }
                catch ( Exception e ) {
                        Log.e( LOG_TAG, e.getMessage() );
                        return Uri.EMPTY;
                }

                return Uri.fromFile( file );

        }

Ti è andata bene che ho già fatto una cosa del genere ;)

Offline Albe85

  • Utente junior
  • **
  • Post: 102
  • Respect: +1
    • Mostra profilo
Re:Problema con un immagine sottoforma di ImageIcon
« Risposta #4 il: 28 Ottobre 2010, 11:28:37 CEST »
0
Grazie 1000 più tardi provo e ti faccio. Ti ringrazio ancora. Ciao.

Offline Albe85

  • Utente junior
  • **
  • Post: 102
  • Respect: +1
    • Mostra profilo
Re:Problema con un immagine sottoforma di ImageIcon
« Risposta #5 il: 28 Ottobre 2010, 13:09:46 CEST »
0
Ho un  problemino con il metodo decode del Base64.

Mi sono creato la classe:
Codice (Java): [Seleziona]
public static byte[] decode (String str,int DEFAULT)
        {
                return decode(str, DEFAULT);
        }

e poi quando vado a fare il parsing della stringa str faccio:
Codice (Java): [Seleziona]
int DEFAULT = 0;
byte[] img = decode(nodeValue2, DEFAULT);
dove nodeValue2 contiene è una stringa codificata con il base64coder.
Mi lascia perplesso il default.
Nel logcat mi dice:
10-28 11:00:00.635: ERROR/AndroidRuntime(384): java.lang.StackOverflowError
10-28 11:00:00.635: ERROR/AndroidRuntime(384):     at ch.egsolutions.databasetutorial.MyParser3.decode(MyParser3.java:57)


Offline Albe85

  • Utente junior
  • **
  • Post: 102
  • Respect: +1
    • Mostra profilo
Re:Problema con un immagine sottoforma di ImageIcon
« Risposta #6 il: 28 Ottobre 2010, 14:36:36 CEST »
0
Il problemino l'ho risolto facendo:
Codice (Java): [Seleziona]
public byte[] Dec64Im(String sino)
        {
                char[] chars = sino.toCharArray();
                byte[] provaimg2 = (Base64Coder.decode(chars,0,chars.length));
                return provaimg2;
        }

e poi facendo:

Codice (Java): [Seleziona]
byte[] img = Dec64Im(nodeValue2);
dove nodeValue2 è la stringa da passare in input al metodo Dec64Im.

Ora mi sono creato il metodo da te suggerito. Faccio:

Codice (Java): [Seleziona]
ByteArrayInputStream imageStream = new ByteArrayInputStream( img );
Bitmap b = BitmapFactory.decodeStream( imageStream );                                          
Uri url = null;
url=saveBitmapAsJPEG(b,"C:/Users/Alberto/Desktop","provaimg.jpg");

E' corretto??
Sul desktop non vedo nessun file jpg.
Nel logcat ho l'eccezione LOG_TAG:FileNotFoudException(357): /C:/Users/Alberto/Desktop/frooova.JPEG

« Ultima modifica: 28 Ottobre 2010, 15:16:27 CEST da Sangio85 »

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Problema con un immagine sottoforma di ImageIcon
« Risposta #7 il: 28 Ottobre 2010, 15:54:39 CEST »
0
Devi mettere un path del filesystem di android, non del tuo pc. Generalmente si salva su memoria sd.

Offline Albe85

  • Utente junior
  • **
  • Post: 102
  • Respect: +1
    • Mostra profilo
Re:Problema con un immagine sottoforma di ImageIcon
« Risposta #8 il: 28 Ottobre 2010, 16:08:12 CEST »
0
Risolto per il path. Grazie!
« Ultima modifica: 28 Ottobre 2010, 16:27:24 CEST da Sangio85 »