如何从ImageView获取位图

时间:2016-12-31 00:52:28

标签: android bitmap

我希望Bitmap加载ImageView加载Glide,如下所示:

Glide.with(getContext()).load(URL)
            .thumbnail(0.5f)
            .crossFade()
            .diskCacheStrategy(DiskCacheStrategy.ALL)
            .into(my_imageView);

我尝试了以下内容:

imageView.buildDrawingCache();
Bitmap bmap = imageView.getDrawingCache();

BitmapDrawable drawable = (BitmapDrawable) imageView.getDrawable();
Bitmap bitmap = drawable.getBitmap();

到目前为止,他们都没有为我工作过。

如何实现这一目标?

4 个答案:

答案 0 :(得分:6)

哦,这是一个简单的错误。您需要在尝试从BitView中获取Bitmap的代码之前添加它:

imageView.setDrawingCacheEnabled(true);

为了使用DrawingCache从{4}中取出Bitmap,首先需要enable ImageView来绘制图像缓存。

然后:

Bitmap bmap = imageView.getDrawingCache();

此外,调用buildDrawingCache();相当于调用buildDrawingCache(false);

答案 1 :(得分:1)

事情发生了变化,这里的答案需要更新。所以这是我在 kotlin 中的解决方案。这是简化的,没有合成或视图绑定(呵呵)。

    val imageView : ImageView = findViewById(R.id.my_imageview)
    val bitmap : Bitmap = imageView.drawable.toBitmap()

在执行此操作之前,您需要确保 ImageView 有时间进行绘制。 onViewCreated() 在 Fragment 中或点击事件之后是执行此操作的好时机。开销不应该太大。

答案 2 :(得分:0)

我遇到的问题是位图仍然总是导致null(即使使用绘图缓存,可能是Facebook ShareButton / ShareContent的一些竞赛)所以我有以下解决方案以确保滑动已完成加载图像:

添加侦听器以滑行

Glide.with(this)
        .load(url)
        .listener(listener)
        .into(imageView);

听众

private RequestListener listener = new RequestListener() {
    ...

    @Override
    public boolean onResourceReady(Object resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) {

        Bitmap bitmap = ((BitmapDrawable) resource).getBitmap();
        return false;
    }
};

答案 3 :(得分:0)

目前setDrawingCacheEnabled已被弃用,因此另一种解决方案是使用

ImageView imageView = findViewById(R.id.image);
Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap();

或者要从Bitmap获取Uri,我们可以使用 Glide 库。

Bitmap bitmap = Glide.with(this) //taking as bitmap
                     .load(uri //Uri)
                     .asBitmap()
                     .into(100, 100) //width and height
                     .get();

使用 Glide 非常适合处理bitmaps。请参阅Handling Bitmaps

中的文档