使用Picasso将图像加载到位图中

3

我正在使用Picasso,想先将图片添加到位图中再添加到ImageView上。我正在使用以下代码行从图库添加一个带有URI的图像并在ImageView上显示它。我想先保存它到位图中。应该怎么做:


```java Picasso.get().load(uri).into(imageView); ```
请注意,此处不需要解释,只需翻译。
Picasso.with(this).load(uriadress).into(imageView);

但我想先将它保存为位图。
2个回答

12

Picasso使用弱引用来持有Target实例。
因此最好将Target作为实例字段来持有。
参见:https://dev59.com/o4nca4cB1Zd3GeqP6BjG#29274669

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);
}

是的,它正在工作。你能告诉我更多关于为什么使用 Picasso 创建实例如此重要的信息吗? - Shahryar
1
如果您不将“Target”设置为实例字段,则“Target”将被垃圾回收。更多信息,请参见此问题 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);

看啊兄弟,如果我想保存位图,这个是有效的。但我不想保存它。我只想使用该位图并将其保存到另一个位图中,因为我想对其进行图像效果处理。 - Shahryar
你想要缓存图片并在以后使用吗? - SaravInfern
不,我只是想将它转换为位图,这样我就可以将其发送到另一个使用renderscript的函数中。我想要这个: onBitmapLoaded.... otherBitmap = bitmap; imageView.setImageBitmap(bitmap); 但它没有正常工作。你试试就会发现。 - Shahryar
好的,那么您可以从onBitmapLoaded函数中获取它,有什么问题吗? - SaravInfern
将位图设置到imageView时出现问题。尝试一下,它没有正常工作。我不知道为什么。 - Shahryar
亲爱的@Saravlnfern,请看一下nshmura的回答,这是因为没有创建目标实例。 - Shahryar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接