2017-06-30 5 views
1

Ich versuche zu schreiben und zu lesen ein Bitmap nach den Vorschlägen zu anderen Themen zu diesem Thema, die Sache ist, ich bekomme nie die Bitmap, wenn ich versuche, auf dem Pfad zu lesen, wo ich das Bild gespeichert:Lesen und schreiben Bitmap zu Android schlägt

so habe ich diese die Bitmap zu schreiben:

private String saveToInternalStorage(Bitmap bitmapImage){ 
     ContextWrapper cw = new ContextWrapper(getApplicationContext()); 
     // path to /data/data/yourapp/app_data/imageDir 
     File directory = cw.getDir("imageDir", Context.MODE_PRIVATE); 
     // Create imageDir 
     File mypath=new File(directory,"captured"); 

     FileOutputStream fos = null; 
     try { 
      fos = new FileOutputStream(mypath); 
      // Use the compress method on the BitMap object to write image to the OutputStream 
      bitmapImage.compress(Bitmap.CompressFormat.JPEG, 100, fos); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       fos.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
     return directory.getAbsolutePath(); 
    } 

} 

i passieren den zurückgegebenen Pfad zu einer anderen Aktivität und dann gebe ich es als Parameter die Bitmap wie folgt zu erhalten:

private void loadImageFromStorage(String path) 
    { 

     try { 
      File f=new File(path, "captured.jpg"); 
      Log.d("filehe",f.toString()); 
      b = BitmapFactory.decodeStream(new FileInputStream(f)); 
     } 
     catch (FileNotFoundException e) 
     { 
      e.printStackTrace(); 
     } 

    } 

ich fühle, dass ich hier etwas falsch mache, aber kann nicht herausfinden, was, die b variavel hat keinen wert: /.

Irgendwelche Hilfe?

Dank

Antwort

0

So habe ich diese die Bitmap zu schreiben:

Die Datei, die Sie wird captured genannt speichern.

i den zurückgegebenen Pfad zu einer anderen Aktivität übergeben und dann gebe ich es als Parameter die Bitmap wie diese

Hier zu bekommen, Sie versuchen, captured.jpg zu laden, was nicht captured.

Sie können dieses Problem vermeiden, indem Sie die erste Methode die File zurückgeben, die die zweite Methode dann verwendet.

auch:

  • Verwenden Sie ein Bild-Laden-Bibliothek (zB Picasso, Glide), die eine In-Memory-Cache hat, so dass Sie nicht die Zeit der Benutzer verschwenden die gleiche Bitmap von Datenträger-re Laden

  • von ContextWrapper aus dem ersten Verfahren befreien Sie sich, wie Sie nicht brauchen, es

+0

i picasso verwenden, ich brauche nur das Bitmap auf andere activitie passieren, wie ich es für th verwenden absichtlich? – afcosta007

+0

@ afcosta007: "Ich benutze Picasso" - Sie verwenden es nicht in dieser zweiten Methode. "Wie kann ich es für diesen Zweck verwenden?" - Sie haben etwas verwendet, um das Bild mit Picasso zu laden, z. B. eine URL oder ein 'Uri'. Übergeben Sie das an die zweite Aktivität, und lassen Sie es auch Picasso verwenden. [Picasso wird dann die zwischengespeicherte Bitmap verwenden, wenn möglich] (https://futurestudio/tutorials/picasso-influencing-image-caching). – CommonsWare

+0

also, was Sie sagen, ist, dass ich Picasso verwenden kann, um die Bitmap aus dem angegebenen Pfad auf die erste Methode zu laden? – afcosta007