为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用滑行将图像下载到位图中?

如何使用滑行将图像下载到位图中?

梦里花落0921 2019-10-28 09:37:02
ImageView使用Glide 将网址下载到中非常容易:Glide   .with(context)   .load(getIntent().getData())   .placeholder(R.drawable.ic_loading)   .centerCrop()   .into(imageView);我想知道是否也可以下载到中Bitmap?我想下载到原始位图中,然后可以使用其他工具进行操作。我已经看过代码,看不到该怎么做。
查看完整描述

3 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

确保您使用的是最新版本


implementation 'com.github.bumptech.glide:glide:4.9.0'


科特林:


Glide.with(this)

        .asBitmap()

        .load(imagePath)

        .into(object : CustomTarget<Bitmap>(){

            override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {

                imageView.setImageBitmap(resource)

            }

            override fun onLoadCleared(placeholder: Drawable?) {

                // this is called when imageView is cleared on lifecycle call or for

                // some other reason.

                // if you are referencing the bitmap somewhere else too other than this imageView

                // clear it here as you can no longer have the bitmap

            }

        })

位图大小:


如果要使用图像的原始大小,请使用上面的默认构造函数,否则可以将所需的大小传递给位图


into(object : CustomTarget<Bitmap>(1980, 1080)


Java:


Glide.with(this)

        .asBitmap()

        .load(path)

        .into(new CustomTarget<Bitmap>() {

            @Override

            public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {

                imageView.setImageBitmap(resource);

            }


            @Override

            public void onLoadCleared(@Nullable Drawable placeholder) {

            }

        });

旧答案:


随着 compile 'com.github.bumptech.glide:glide:4.8.0'以下


Glide.with(this)

        .asBitmap()

        .load(path)

        .into(new SimpleTarget<Bitmap>() {

            @Override

            public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {

                imageView.setImageBitmap(resource);

            }

        });

对于compile 'com.github.bumptech.glide:glide:3.7.0'及以下


Glide.with(this)

        .load(path)

        .asBitmap()

        .into(new SimpleTarget<Bitmap>() {

            @Override

            public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {

                imageView.setImageBitmap(resource);

            }

        });

现在您可能会看到一个警告 SimpleTarget is deprecated


原因:


弃用SimpleTarget的主要目的是警告您诱使您违反Glide的API合同的方式。具体来说,一旦清除SimpleTarget,它并不会迫使您停止使用已加载的任何资源,这可能导致崩溃和图形损坏。


将SimpleTarget仍然可以只要你确保你没有使用位图,一旦ImageView的清除使用。


查看完整回答
反对 回复 2019-10-28
?
饮歌长啸

TA贡献1951条经验 获得超3个赞

我对Glide不太熟悉,但是看起来如果您知道目标尺寸,则可以使用以下方法:


Bitmap theBitmap = Glide.

        with(this).

        load("http://....").

        asBitmap().

        into(100, 100). // Width and height

        get();

看来您可以通过-1,-1,并获得完整尺寸的图像(纯粹基于测试,看不到文档记录)。


注意into(int,int)返回a FutureTarget<Bitmap>,因此您必须将其包装在try和catch块中,覆盖ExecutionException和InterruptedException。这是经过测试并可以正常工作的更完整的示例实现:


class SomeActivity extends Activity {


    private Bitmap theBitmap = null;


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        // onCreate stuff ...

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


        new AsyncTask<Void, Void, Void>() {

            @Override

            protected Void doInBackground(Void... params) {

                Looper.prepare();

                try {

                    theBitmap = Glide.

                        with(SomeActivity.this).

                        load("https://www.google.es/images/srpr/logo11w.png").

                        asBitmap().

                        into(-1,-1).

                        get();

                 } catch (final ExecutionException e) {

                     Log.e(TAG, e.getMessage());

                 } catch (final InterruptedException e) {

                     Log.e(TAG, e.getMessage());

                 }

                 return null;

            }

            @Override

            protected void onPostExecute(Void dummy) {

                if (null != theBitmap) {

                    // The full bitmap should be available here

                    image.setImageBitmap(theBitmap);

                    Log.d(TAG, "Image loaded");

                };

            }

        }.execute();

    }

}

遵循下面的评论中Monkeyless的建议(这似乎也是官方方式),您可以使用SimpleTarget,可选地加上,override(int,int)以大大简化代码。但是,在这种情况下,必须提供确切的大小(不接受小于1的任何值):


Glide

    .with(getApplicationContext())

    .load("https://www.google.es/images/srpr/logo11w.png")

    .asBitmap()

    .into(new SimpleTarget<Bitmap>(100,100) {

        @Override

        public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) {

            image.setImageBitmap(resource); // Possibly runOnUiThread()

        }

    });

如@hennry所建议,如果您需要相同的图像,则使用new SimpleTarget<Bitmap>()


查看完整回答
反对 回复 2019-10-28
  • 3 回答
  • 0 关注
  • 436 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信