2016-07-23 15 views
1

Ich benutze Picasso. Und ich möchte das Bild zuerst zu Bitmap hinzufügen und dann zu einem Bildausschnitt hinzufügen. Ich verwende die folgende Codezeile, die ein Bild aus der Galerie mit URI hinzufügt und es in der Bildansicht anzeigt. Ich möchte es zuerst auf einer Bitmap speichern. was soll ich tun:Bild mit Picasso zu einem Bitmap laden zuerst

Picasso.with(this).load(uriadress).into(imageView); 

aber ich möchte es zuerst auf einer Bitmap speichern.

Antwort

8

Picasso Target Instanz mit schwachen Verweise hält.
So ist es besser, Target als Instanz Feld zu halten.
sehen: https://stackoverflow.com/a/29274669/5183999

private Target mTarget; 

void loadImage(Context context, String url) { 

    final ImageView imageView = (ImageView) findViewById(R.id.image); 

    mTarget = new Target() { 
     @Override 
     public void onBitmapLoaded (final Bitmap bitmap, Picasso.LoadedFrom from){ 
      //Do something 
      ... 

      imageView.setImageBitmap(bitmap); 
     } 

     @Override 
     public void onBitmapFailed(Drawable errorDrawable) { 

     } 

     @Override 
     public void onPrepareLoad(Drawable placeHolderDrawable) { 

     } 
    }; 

    Picasso.with(context) 
      .load(url) 
      .into(mTarget); 
} 
+0

YESSSSSS, es funktioniert. Kannst du mir mehr darüber erzählen, warum das Erstellen einer Instanz bei Picasso so wichtig ist? – Shahryar

+1

Wenn Sie 'Target' nicht auf das Instanzfeld setzen, wird' Target' als Garbage Collected behandelt. Weitere Informationen finden Sie in dieser Ausgabe https://github.com/square/picasso/issues/352 – nshmura

3

Sie können wie dies tun

private Target image; 
image = new Target() { 
     @Override 
     public void onBitmapLoaded (final Bitmap bitmap, Picasso.LoadedFrom from){ 
      new Thread(new Runnable() { 
       @Override 
       public void run() { 
        File file = new File(Environment.getExternalStorageDirectory().getPath() + "/" + FILEPATH); 
        try { 
         file.createNewFile(); 
         FileOutputStream outstream = new FileOutputStream(file); 
         bitmap.compress(CompressFormat.JPEG, 75, outstream); 
         outstream.close(); 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
       } 
      }).start(); 
     } 
    } 
Picasso.with(this) 
     .load(currentUrl) 
     .into(image); 
+0

Blick bro dies funktioniert, wenn ich die Bitmap speichern möchten. Ich möchte es nicht speichern. Ich möchte nur das Bitmap verwenden und es zum Beispiel zu einem anderen Bitmap speichern, weil ich Bildeffekte darauf machen möchte. – Shahryar

+0

Möchten Sie das Bild zwischenspeichern und später verwenden? – SaravInfern

+0

Nein, ich möchte es nur in einer Bitmap haben, damit ich es an eine andere Funktion senden kann, die rendscript verwendet. Ich möchte dies haben: onBitmapLoaded .... otherBitmap = Bitmap; imageView.setImageBitmap (Bitmap); aber es funktioniert nicht richtig. probier es aus, du wirst sehen. – Shahryar