Autore Topic: Caricare un'immagine jpg in un oggetto Bitmap...non mi funziona...help  (Letto 915 volte)

Offline AndreaNobili

  • Utente junior
  • **
  • Post: 75
  • Respect: 0
    • Mostra profilo
0
Ciao ragazzi,

allora in un mio progetto Android ho creato una directory chiama "img" alla stessa altezza di "src" e quì vi ho messo un'immagine chiamata: "pescepagliaccio.jpg"

A questo punto dovrei fare in modo di creare un oggetto Bitmap a partire da questa immagine...ho fatto così ma non mi funziona:

Codice: [Seleziona]
public class ConvolveTestActivity extends Activity {
       
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
       // File inputFile = new File("/home/andrea/workspace2/blur1/img/", "pesce-pagliaccio.jpg");
       // System.out.println("inputFile punta a: " + inputFile.toString());
       
        Bitmap tgtImg = BitmapFactory.decodeFile("/home/andrea/workspace2/ConvolveTest/img/pescepagliaccio.jpg");
                System.out.println("Ho caricato l'immagine originale in formato Bitmap che punta a: " + tgtImg);
       
       
    }
}

Tramite BitmapFactory.decodeFile dovrei creare l'oggetto Bitmap e metterlo dentro la variabile tgtImg ma...nel logcat appare:


09-29 14:32:15.821: INFO/System.out(370): Ho caricato l'immagine originale in formato Bitmap che punta a: null


Quindi non ce lo ha messo...come mai? da cosa può dipendere? un problema di percorso del file? come posso risolvere?

Grazie
Andrea

Offline Luigi.Arena

  • Utente senior
  • ****
  • Post: 616
  • DACIA DUSTER 4X4 SUPER
  • Respect: +56
    • Mostra profilo
    • ArenaWebTest
  • Dispositivo Android:
    epad m009
  • Play Store ID:
    Luigi Arena
  • Sistema operativo:
    Windows 7
Re:Caricare un'immagine jpg in un oggetto Bitmap...non mi funziona...help
« Risposta #1 il: 29 Settembre 2011, 18:03:39 CEST »
0

09-29 14:32:15.821: INFO/System.out(370): Ho caricato l'immagine originale in formato Bitmap che punta a: null


Non è usabile sotto Android usa invece la classe log.
Al volo ecco l'struzione:
log.i("tag","dato");
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato .

Offline AndreaNobili

  • Utente junior
  • **
  • Post: 75
  • Respect: 0
    • Mostra profilo
Re:Caricare un'immagine jpg in un oggetto Bitmap...non mi funziona...help
« Risposta #2 il: 29 Settembre 2011, 20:46:36 CEST »
0
Non è usabile sotto Android usa invece la classe log.
Al volo ecco l'struzione:
log.i("tag","dato");

Ciao...
e perchè non potrei usare System.out.println? A me funziona e nel logcat mi appare comunque il messaggio tirato fuori...

Comunque sia ho provato anche a fare così:

Codice: [Seleziona]
Bitmap tgtImg = BitmapFactory.decodeFile("ConvolveTest/res/drawable-hdpi/icon.png");
                Log.i("Ho caricato l'immagine originale in formato Bitmap che punta a", tgtImg.toString());

Il risultato è che mi tira fuori questa bella NullPointerException perchè di fatto tgtImg è null, quindi quando gli faccio toString() solleva l'eccezione...

Codice: [Seleziona]
09-29 18:32:18.065: ERROR/AndroidRuntime(367): FATAL EXCEPTION: main
09-29 18:32:18.065: ERROR/AndroidRuntime(367): java.lang.RuntimeException: Unable to start activity ComponentInfo{andrea.classi/andrea.classi.ConvolveTestActivity}: java.lang.NullPointerException
09-29 18:32:18.065: ERROR/AndroidRuntime(367):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1622)
09-29 18:32:18.065: ERROR/AndroidRuntime(367):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1638)
09-29 18:32:18.065: ERROR/AndroidRuntime(367):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
09-29 18:32:18.065: ERROR/AndroidRuntime(367):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:928)
09-29 18:32:18.065: ERROR/AndroidRuntime(367):     at android.os.Handler.dispatchMessage(Handler.java:99)
09-29 18:32:18.065: ERROR/AndroidRuntime(367):     at android.os.Looper.loop(Looper.java:123)
09-29 18:32:18.065: ERROR/AndroidRuntime(367):     at android.app.ActivityThread.main(ActivityThread.java:3647)
09-29 18:32:18.065: ERROR/AndroidRuntime(367):     at java.lang.reflect.Method.invokeNative(Native Method)
09-29 18:32:18.065: ERROR/AndroidRuntime(367):     at java.lang.reflect.Method.invoke(Method.java:507)
09-29 18:32:18.065: ERROR/AndroidRuntime(367):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
09-29 18:32:18.065: ERROR/AndroidRuntime(367):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
09-29 18:32:18.065: ERROR/AndroidRuntime(367):     at dalvik.system.NativeStart.main(Native Method)
09-29 18:32:18.065: ERROR/AndroidRuntime(367): Caused by: java.lang.NullPointerException
09-29 18:32:18.065: ERROR/AndroidRuntime(367):     at andrea.classi.ConvolveTestActivity.onCreate(ConvolveTestActivity.java:52)
09-29 18:32:18.065: ERROR/AndroidRuntime(367):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
09-29 18:32:18.065: ERROR/AndroidRuntime(367):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1586)
09-29 18:32:18.065: ERROR/AndroidRuntime(367):     ... 11 more

(e a questo punto mi viene il dubbio...ma per tracciare questa cosa non era meglio usare proprio il System.out.println() che almeno potevo passargli direttamente l'oggetto senza il toString e sapevo che era quello ad essere null senza doverlo ricavare da una NullPointerException? sempre che non mi sfugga qualcosa...)

Come posso risolvere questa cosa?

La cosa strana è che se invece metto l'immagine pescepagliaccio.jpg dentro /res/drawable-hdpi e costruisco la Bitmap così:

Codice: [Seleziona]
Bitmap tgtImg = BitmapFactory.decodeResource(getResources(), R.drawable.pescepagliaccio);

FUNZIONA !!!

Però io ho proprio bisogno di richiamarlo dal percorso del file e non da una risorsa registrata nella classe R...

Qualcuno che mi sà aiutare?

Grazie mille
Andrea


Offline AndreaNobili

  • Utente junior
  • **
  • Post: 75
  • Respect: 0
    • Mostra profilo
Re:Caricare un'immagine jpg in un oggetto Bitmap...non mi funziona...help
« Risposta #4 il: 01 Ottobre 2011, 20:18:12 CEST »
0
Accedere alle risorse usando la stringa del nome - Android Developers Italia

mmm si però mi sà che no hai capito ciò che intendevo dire...da quello che leggo in quella guida, citazione: "Per accedere ad un drawable (ma vale per qualsiasi risorsa che abbia un ID) partendo dal nome del file originario c'è la funzione getIdentifier, che restituisce l'identificativo della risorsa."

Quì si fà esplicito riferimento ad immagini che stanno dentro la cartella /res/drawable-hdpi/ quindi ad immagini che sono registrare nella classe R

Infatti se ad esempio metto il file pescepagliaccio.jpg dentro /res/drawable-hdpi/ questo Drawable viene registrato della classe R che infatti contiene il seguente metodo:

Codice: [Seleziona]
public static final class drawable {
        public static final int icon=0x7f020000;
        public static final int pescepagliaccio=0x7f020001;
    }

e se nella mia Activity metto le righe di codice:

Codice: [Seleziona]
int imgId = getResources().getIdentifier("pescepagliaccio","drawable",getPackageName());
        System.out.println("imgId è: " + imgId);

nel logcat mi ritorna il seguente output:
10-01 18:01:19.111: INFO/System.out(469): imgId è: 2130837505

E ad intuito mi viene da pensare che il valore 0x7f020001 nella classe R corrisponda all'id: 2130837505 tirato fuori, correggimi se dico cavolate...

Quindi tutto questo funzionerebbe molto bene se le immagini che devono essere visualizzate sono immagini dentro /res/drawable-hdpi/ che creano il loro id dentro la classe R a compile time...ma nel mio caso specifico invece si tratta di immagini .jpg che non stanno dentro alcuna sottocartella di /res/ e che quindi non hanno id dentro la classe R...questo perchè sono immagini che ad esempio possono essere caricate dall'utente in qualche modo (prese dalla gallery), scaricate da un indirizzo web...

Quindi devo proprio aprire un file .jpg e da questo creare un oggetto Bitmap...

Qualche idea? credo che sia fattibile come cosa...

Grazie mille
Andrea









Offline AndreaNobili

  • Utente junior
  • **
  • Post: 75
  • Respect: 0
    • Mostra profilo
Re:Caricare un'immagine jpg in un oggetto Bitmap...non mi funziona...help
« Risposta #5 il: 01 Ottobre 2011, 21:21:21 CEST »
0
mmm mi viene da pensare che forse dovrei usare gli Assets? (non li ho mai usati...ho solo visto a grandi linee cosa sono)

Pensate che possa essere questa la soluzione al mio problema o che ce ne siano altre?

In pratica nella mia applicazione verranno prese delle immagini .jpg e messe in una directory. Poi l'utente può scegliere di aprirne una e visualizzarla per farci sopra delle operazioni per cui è necessario costruire un oggetto Bitmap a partire dal file jpg

Pareri?

Tnx
Andrea