如何从imageView获取位图

时间:2018-01-06 04:13:07

标签: android bitmap android-bitmap

我需要从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中的这张照片并将其作为位图。在最后一行代码之后有一个例外。我做错了什么?

4 个答案:

答案 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();