我希望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();
到目前为止,他们都没有为我工作过。
如何实现这一目标?
答案 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