Autore Topic: Problema serializzazione immagine presa da galleria  (Letto 1419 volte)

Offline ionio89

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: 0
    • Mostra profilo
Problema serializzazione immagine presa da galleria
« il: 22 Febbraio 2011, 13:46:38 CET »
0
Salve a tutti avrei un piccolo problema da risolvere... Ho la necessità di caricare un'immagine dalla galleria del mio emulatore Android (ho già creato una SD virtuale ed ho inserito l'immagine nella stessa) soltanto che devo usare tale immagine per renderla prima in byte[] per poi trasformarla in Bitmap e poterci lavorare sopra...
Come prova "leggo" l'immagine e poi la salvo come jpeg mediante la classe Bitmap, giusto per prova...

Il codice che ho usato è:
Codice (Java): [Seleziona]
String path = "money.jpg";// nome dell'immagine presente su sd
String path3 = "money3.jpg"; //provo a salvare l'immagine jpg
File root = Environment.getExternalStorageDirectory();
                try {
                        FileInputStream inFile = new FileInputStream(new File(root, path));
                                       
                        ObjectInputStream inStream = new ObjectInputStream(inFile);
                        byte[] ciao = (byte[]) inStream.readObject();
                        inStream.close();
                                               
                        bitmapImage= BitmapFactory.decodeByteArray(ciao,0,ciao.length);
                        bitmapImage.compress(CompressFormat.JPEG, 100, new FileOutputStream(new File(root,path3)));
                                } catch (FileNotFoundException e1) {
                                        // TODO Auto-generated catch block
                                        Log.d("FIle nn trovato1.","File non trovato");
                                } catch (StreamCorruptedException e) {
                                        //// TODO Auto-generated catch block
                                        Log.d("FIle nn trovato2.","File non trovato");
                                       
                                } catch (IOException e) {
                                        // TODO Auto-generated catch block
                                        Log.d("FIle nn trovato3.","File non trovato");
                                                       
                                } catch (ClassNotFoundException e) {
                                        // TODO Auto-generated catch block
                                        Log.d("FIle nn trovato4.","File non trovato");
                                       
                                }

L'unico problema è che mi genera un eccezione StreamCorruptedException e quindi non mi salva l'immagine (l'errore risiede nella lettura dell'immagine) ma non riesco a capirne il motivo... Mi potete aiutare?? Grazie in anticipo.

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Problema serializzazione immagine presa da galleria
« Risposta #1 il: 22 Febbraio 2011, 13:50:02 CET »
0
sarebbe bene che postassi il logcat.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Problema serializzazione immagine presa da galleria
« Risposta #2 il: 22 Febbraio 2011, 14:12:23 CET »
0
sicuro si faccia readObject? c'è il metodo per leggere un'array di byte da un input stream,che è lo stesso che si usa nei download online per fare il download con la progress bar
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline ionio89

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: 0
    • Mostra profilo
Re:Problema serializzazione immagine presa da galleria
« Risposta #3 il: 22 Febbraio 2011, 16:17:13 CET »
0
02-22 15:16:07.575: DEBUG/AndroidRuntime(271): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<
02-22 15:16:07.575: DEBUG/AndroidRuntime(271): CheckJNI is ON
02-22 15:16:08.004: DEBUG/AndroidRuntime(271): --- registering native functions ---
02-22 15:16:09.594: INFO/ActivityManager(66): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.tutorial.camera/.Coin_Recognition }
02-22 15:16:09.715: DEBUG/AndroidRuntime(271): Shutting down VM
02-22 15:16:09.735: DEBUG/jdwp(271): adbd disconnected
02-22 15:16:09.774: INFO/AndroidRuntime(271): NOTE: attach of thread 'Binder Thread #3' failed
02-22 15:16:09.844: INFO/ActivityManager(66): Start proc com.tutorial.camera for activity com.tutorial.camera/.Coin_Recognition: pid=278 uid=10032 gids={1006, 1015}
02-22 15:16:14.695: INFO/ActivityManager(66): Displayed activity com.tutorial.camera/.Coin_Recognition: 5001 ms (total 5001 ms)
02-22 15:16:14.835: INFO/ARMAssembler(66): generated scanline__00000077:03545404_00000004_00000000 [ 47 ipp] (67 ins) at [0x33d228:0x33d334] in 11298497 ns
02-22 15:16:16.694: INFO/ActivityManager(66): Starting activity: Intent { cmp=com.tutorial.camera/.CameraView }
02-22 15:16:16.764: INFO/WindowManager(66): Setting rotation to 1, animFlags=1
02-22 15:16:16.795: INFO/ActivityManager(66): Config changed: { scale=1.0 imsi=310/260 loc=en_US touch=3 keys=2/1/2 nav=3/1 orien=2 layout=18 uiMode=17 seq=4}
02-22 15:16:17.885: DEBUG/dalvikvm(278): GC_EXTERNAL_ALLOC freed 1000 objects / 68728 bytes in 267ms
02-22 15:16:18.104: INFO/ActivityManager(66): Displayed activity com.tutorial.camera/.CameraView: 1336 ms (total 1336 ms)
02-22 15:16:18.364: DEBUG/CameraHardwareStub(34): initHeapLocked: preview size=320x240
02-22 15:16:18.484: DEBUG/CameraHardwareStub(34): initHeapLocked: preview size=410x320
02-22 15:16:18.774: INFO/ARMAssembler(66): generated scanline__00000077:03010104_00000009_00000000 [ 28 ipp] (47 ins) at [0x2b4d28:0x2b4de4] in 1681232 ns
02-22 15:16:21.144: DEBUG/dalvikvm(66): GC_EXPLICIT freed 3609 objects / 219736 bytes in 495ms
02-22 15:16:21.265: DEBUG/FIle nn trovato2.(278): File non trovato
02-22 15:16:24.434: DEBUG/dalvikvm(126): GC_EXPLICIT freed 1192 objects / 56696 bytes in 200ms

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Problema serializzazione immagine presa da galleria
« Risposta #4 il: 22 Febbraio 2011, 16:21:47 CET »
0
Quello che fai non è il modo migliore per gestire le eccezioni.
Mi va bene che scrivi file non trovato (perché poi?), ma è il caso che stampi anche lo stack dell'eccezione completa.
Per questo ti richiedevo il logcat.


Comunque prova a leggere il file con:


Codice (Java): [Seleziona]
Bitmap bm = BitmapFactory.decodeStream(is);
dove is è l'input stream.....
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline ionio89

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: 0
    • Mostra profilo
Re:Problema serializzazione immagine presa da galleria
« Risposta #5 il: 22 Febbraio 2011, 16:29:20 CET »
0
Scrivo così per capire dove viene generata l'eccezione... comunque ho provato ad usare lo stream con la classe BitmapFactory(che avevo comunque già provato) ad ogni modo l'eccezione sollevata (con la stampa dello stack) è:


02-22 15:27:47.826: DEBUG/FIle nn trovato2.(549): File non trovato
02-22 15:27:47.925: WARN/System.err(549): java.io.StreamCorruptedException
02-22 15:27:48.156: WARN/System.err(549):     at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:2392)
02-22 15:27:48.156: WARN/System.err(549):     at java.io.ObjectInputStream.<init>(ObjectInputStream.java:445)
02-22 15:27:48.195: WARN/System.err(549):     at com.tutorial.camera.CameraView$4.onClick(CameraView.java:164)
02-22 15:27:48.195: WARN/System.err(549):     at android.view.View.performClick(View.java:2408)
02-22 15:27:48.245: WARN/System.err(549):     at android.view.View$PerformClick.run(View.java:8816)
02-22 15:27:48.245: WARN/System.err(549):     at android.os.Handler.handleCallback(Handler.java:587)
02-22 15:27:48.245: WARN/System.err(549):     at android.os.Handler.dispatchMessage(Handler.java:92)
02-22 15:27:48.314: WARN/System.err(549):     at android.os.Looper.loop(Looper.java:123)
02-22 15:27:48.395: WARN/System.err(549):     at android.app.ActivityThread.main(ActivityThread.java:4627)
02-22 15:27:48.395: WARN/System.err(549):     at java.lang.reflect.Method.invokeNative(Native Method)
02-22 15:27:48.427: WARN/System.err(549):     at java.lang.reflect.Method.invoke(Method.java:521)
02-22 15:27:48.427: WARN/System.err(549):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
02-22 15:27:48.474: WARN/System.err(549):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
02-22 15:27:48.474: WARN/System.err(549):     at dalvik.system.NativeStart.main(Native Method)

Offline ionio89

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: 0
    • Mostra profilo
Re:Problema serializzazione immagine presa da galleria
« Risposta #6 il: 22 Febbraio 2011, 16:36:48 CET »
0
Anche usando il suo suggerimento l'eccezione è sempre quella dello stream "corrotto"... quindi forse il problema risiede sopra su come tratto l'immagine...

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Problema serializzazione immagine presa da galleria
« Risposta #7 il: 22 Febbraio 2011, 17:45:15 CET »
+1
primo: quando dici "usando il suo suggerimento", intendevi darmi del lei? se è così, puoi benissimo passare al tu. Quì non c'è nessuno che merita il Lei, fidati. ;)
Scherzi a parte, ci diamo tutti del tu, quindi.....

Tornando al problema, mi viene in mente che forse l'immagine di partenza sia realmente corrotta?

Io uso tranquillamente il decodeStream con uno stream url.....
Altra domanda: tu quale stream passi? l'ObjectInputStream o il FileInputStream?
Se passi l'ObjectInputStream, prova con il FileINputStream, perché potrebbe esserci un errore nella conversione....
« Ultima modifica: 22 Febbraio 2011, 17:47:19 CET da 7h38ugg3r »
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline ionio89

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: 0
    • Mostra profilo
Re:Problema serializzazione immagine presa da galleria
« Risposta #8 il: 22 Febbraio 2011, 18:33:25 CET »
0
Si! Se metto FileInputStream funziona! Complimenti e grazie per il suggerimento!!! P.s. Un ultimo quesito... dato che io leggevo l'immagine e poi con

Codice (Java): [Seleziona]
bitmapImage.compress(CompressFormat.JPEG, 100, new FileOutputStream(new File(root,path2)));
la salvavo nella sd... è normale che io debba chiudere l'emulatore e riaprirlo affinché l'immagine appaia nella galleria??? perché se vado a controllare subito dopo che chiudo il programma non c'è, mentre se vado fisicamente nella sd o avvio di nuovo l'emulaore appare...

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Problema serializzazione immagine presa da galleria
« Risposta #9 il: 22 Febbraio 2011, 19:56:20 CET »
0
Si! Se metto FileInputStream funziona! Complimenti e grazie per il suggerimento!!! P.s. Un ultimo quesito... dato che io leggevo l'immagine e poi con

Codice (Java): [Seleziona]
bitmapImage.compress(CompressFormat.JPEG, 100, new FileOutputStream(new File(root,path2)));
la salvavo nella sd... è normale che io debba chiudere l'emulatore e riaprirlo affinché l'immagine appaia nella galleria??? perché se vado a controllare subito dopo che chiudo il programma non c'è, mentre se vado fisicamente nella sd o avvio di nuovo l'emulaore appare...
eh perchè il media scanner deve essere fatto ripartire... purtroppo non so se e come si faccia, ma so che il motivo è quello!
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Problema serializzazione immagine presa da galleria
« Risposta #10 il: 22 Febbraio 2011, 20:26:55 CET »
+1
Come diceva Nicola devi far partire il media scanner.

Codice (Java): [Seleziona]
        private static class MediaScannerNotifier implements MediaScannerConnectionClient {
                private Context                                 mContext;
                private MediaScannerConnection  mConnection;
                private String                                  mPath;
                private String                                  mMimeType;

                public MediaScannerNotifier ( Context context, String path, String mimeType ) {
                        mContext = context;
                        mPath = path;
                        mMimeType = mimeType;
                        mConnection = new MediaScannerConnection( context, this );
                        mConnection.connect();
                }

                public void onMediaScannerConnected () {
                        mConnection.scanFile( mPath, mMimeType );
                }

                public void onScanCompleted ( String path, Uri uri ) {
                        mConnection.disconnect();
                }

        }

e poi la richiami con

Codice (Java): [Seleziona]
new MediaScannerNotifier( this, "pathDellImmagine"), "image/jpeg" );

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Problema serializzazione immagine presa da galleria
« Risposta #11 il: 22 Febbraio 2011, 20:35:11 CET »
0
Come diceva Nicola devi far partire il media scanner.

Codice (Java): [Seleziona]
        private static class MediaScannerNotifier implements MediaScannerConnectionClient {
                private Context                                 mContext;
                private MediaScannerConnection  mConnection;
                private String                                  mPath;
                private String                                  mMimeType;

                public MediaScannerNotifier ( Context context, String path, String mimeType ) {
                        mContext = context;
                        mPath = path;
                        mMimeType = mimeType;
                        mConnection = new MediaScannerConnection( context, this );
                        mConnection.connect();
                }

                public void onMediaScannerConnected () {
                        mConnection.scanFile( mPath, mMimeType );
                }

                public void onScanCompleted ( String path, Uri uri ) {
                        mConnection.disconnect();
                }

        }

e poi la richiami con

Codice (Java): [Seleziona]
new MediaScannerNotifier( this, "pathDellImmagine"), "image/jpeg" );
credo funzioni anche con "image/*" per non specificare il tipo esatto (almeno quando uso io i mime per aprire i file gli va bene)
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Problema serializzazione immagine presa da galleria
« Risposta #12 il: 23 Febbraio 2011, 09:02:48 CET »
0
Come diceva Nicola devi far partire il media scanner.

Codice (Java): [Seleziona]
        private static class MediaScannerNotifier implements MediaScannerConnectionClient {
                private Context                                 mContext;
                private MediaScannerConnection  mConnection;
                private String                                  mPath;
                private String                                  mMimeType;

                public MediaScannerNotifier ( Context context, String path, String mimeType ) {
                        mContext = context;
                        mPath = path;
                        mMimeType = mimeType;
                        mConnection = new MediaScannerConnection( context, this );
                        mConnection.connect();
                }

                public void onMediaScannerConnected () {
                        mConnection.scanFile( mPath, mMimeType );
                }

                public void onScanCompleted ( String path, Uri uri ) {
                        mConnection.disconnect();
                }

        }

e poi la richiami con

Codice (Java): [Seleziona]
new MediaScannerNotifier( this, "pathDellImmagine"), "image/jpeg" );

ottima ricky.
Se già non ci fosse, che ne dici di metterlo tra gli snippet? credo interessi a molti.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/