我需要从imageView中获取图像并将其作为位图。
String s = getIntent().getStringExtra("ImageUri");
mImageViewFilter = (ImageView) findViewById(R.id.imageViewFilter);
Glide.with(this)
.load(s)
.into(mImageViewFilter);
Bitmap bitmap = ((BitmapDrawable)mImageViewFilter.getDrawable()).getBitmap();
你可以看到进入mImageViewFilter我正在使用它的URI和Glide库加载一张照片。 我的下一步是拍摄mImageViewFilter中的这张照片并将其作为位图。在最后一行代码之后有一个例外。我做错了什么?
答案 0 :(得分:1)
String s = getIntent().getStringExtra("ImageUri");
mImageViewFilter = (ImageView) findViewById(R.id.imageViewFilter);
要将图像加载到ImageView,请使用下面的代码
Glide.with(this).load(s).into(mImageViewFilter);
所以为了从ImageView(mImageViewFilter)获取位图
Bitmap bitmap = ((BitmapDrawable)image.getDrawable()).getBitmap();
或强>
您可以在尝试从BitView中获取Bitmap的代码之前添加此内容
mImageViewFilter.setDrawingCacheEnabled(true);
为了使用DrawingCache将Bitmap从ImageView中取出,首先需要启用ImageView来绘制图像缓存。
Bitmap bitmap = mImageViewFilter.getDrawingCache();
答案 1 :(得分:1)
首先将其作为位图,然后再次将其应用于我们的ImageView:
Bitmap bitmap = Glide.with(this) //taking as bitmap
.load(s)
.asBitmap()
.into(100, 100) //width and height
.get();
Glide.with(this) //apply to imageview
.load(s)
.into(mImageViewFilter);
答案 2 :(得分:1)
其实你做对了。但问题是图像加载是异步调用
你在下一行中调用了getBitmap()
,它将被顺序调用。
无论如何它都会给你null因为图像还没有加载。
<强>解决方案强>
如果您想在下一个直接步骤中执行此操作。您可以使用直接Bitmap
回调。
Glide.with(this)
.asBitmap()
.load(path)
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {
imageView.setImageBitmap(resource);
// Use resource as bitmap save it for later.
}
});
答案 3 :(得分:0)
从包含View
的任何ImageView
获取位图的直接方法是从中获取绘图缓存。
mImageViewFilter.buildDrawingCache();
Bitmap bitmap = mImageViewFilter.getDrawingCache();
但上述方法可能会为您提供低质量的图像。
我认为您应该使用Uri
BitmapFactory
解码位图
InputStream in = context.getContentResolver().openInputStream(uri);
Bitmap bitmap = BitmapFactory.decodeStream(in);
in.close();