2016-07-23 8 views
1

Я использую Picasso. И я хочу сначала добавить изображение в растровое изображение, а затем добавить его в образ. Я использую следующую строку кода, которая добавляет изображение из галереи с помощью uri и показывает ее на изображении. Я хочу сначала сохранить его в растровом изображении. что я должен делать:Загрузить изображение с Picasso в растровое изображение

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

, но я хочу сначала сохранить его в растровом изображении.

ответ

8

Picasso имеет Target экземпляр со слабой ссылки.
Так что лучше провести Target в качестве поля экземпляра.
см: 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, он работает. можете ли вы рассказать мне больше о том, почему создание экземпляра так важно с пикассо? – Shahryar

+1

Если вы не установите поле «Целевое» в поле экземпляра, «Целевой» будет собираться мусор. Для получения дополнительной информации см. Эту проблему https://github.com/square/picasso/issues/352 – nshmura

3

Вы можете сделать так

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

взгляд братан это работает, если я хочу, чтобы сохранить растровое изображение. Я не хочу его спасать. я просто хочу использовать растровое изображение и сохранить его, например, для другого растрового изображения, потому что я хочу делать на нем эффекты изображения. – Shahryar

+0

Вы хотите кешировать изображение и использовать его позже? – SaravInfern

+0

Нет, я просто хочу иметь его в некотором растровом изображении, поэтому я могу отправить его другой функции, использующей renderscript. Я хочу иметь это: onBitmapLoaded .... otherBitmap = bitmap; imageView.setImageBitmap (bitmap); , но не работает. попробуйте, вы увидите. – Shahryar

Смежные вопросы