将位图附加到ImageView


314

给定

ImageView image = R.findViewById(R.id.imageView);
image.setImageBitmap(someBitmap);

是否可以检索位图?


1
是的,当您单击图像时,我们可能会得到,如果您需要此要求,请告诉我。
RajaReddy PolamReddy

Answers:


809
Bitmap bitmap = ((BitmapDrawable)image.getDrawable()).getBitmap();

34
请小心检查您是否image.getDrawable()真的可以投射到BitmapDrawable(避免IllegalCastExceptions)。例如,如果您在图像中使用图层,则此片段将略有不同:Bitmap bitmap = ((BitmapDrawable)((LayerDrawable)image.getDrawable()).getDrawable(0)).getBitmap();
Alex Semeniuk 2013年

2
有时,这将返回带有一些或全部黑色像素的位图。

2
如果您已将其应用于drawable / imageview,则此操作将不会返回原始位图或已过滤的位图。
DearDhruv

4
如果ImageView从中设置了图像,这行得通URI吗?imageView.setImageUri()
Hendra Anggrian

1
@praneethkumar它确实适用于我的情况。竖起大拇指,这个很棒的答案!
亨德拉·安格里安

46

这将使您Bitmap从中受益ImageView。但是,它与您设置的位图对象不同。这是一个新的。

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

===编辑===

 imageView.setDrawingCacheEnabled(true);
 imageView.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), 
                   MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
 imageView.layout(0, 0, 
                  imageView.getMeasuredWidth(), imageView.getMeasuredHeight()); 
 imageView.buildDrawingCache(true);
 Bitmap bitmap = Bitmap.createBitmap(imageView.getDrawingCache());
 imageView.setDrawingCacheEnabled(false);

当它“不起作用”时,会发生什么?它是否返回null或引发异常或什么?
Sarwar Erfan

2
它返回null。有时,我必须重新加载页面才能使其实际显示。
柠檬

3
给我一个空指针。:(在这条线上:Bitmap bmap = Bitmap.createBitmap(mImageView.getDrawingCache());
Azurespot 2015年

在Kotlin中不建议使用drawingCache
Raju yourPepe '18 -10-5

3

写下面的代码

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

我得到AppCompatImageView无法转换为android.graphics.drawable.BitmapDrawable
Billyjoker

1

对于那些谁正在寻找Kotlin解决方案,使BitmapImageView

var bitmap = (image.drawable as BitmapDrawable).bitmap

我得到AppCompatImageView无法转换为android.graphics.drawable.BitmapDrawable
Billyjoker

0

这段代码更好。

public static  byte[] getByteArrayFromImageView(ImageView imageView)
    {
        BitmapDrawable bitmapDrawable = ((BitmapDrawable) imageView.getDrawable());
        Bitmap bitmap;
        if(bitmapDrawable==null){
            imageView.buildDrawingCache();
            bitmap = imageView.getDrawingCache();
            imageView.buildDrawingCache(false);
        }else
        {
            bitmap = bitmapDrawable .getBitmap();
        }
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
        return stream.toByteArray();
    }

是imageView.getDrawable(); ->是指从可绘制文件夹中获取图像?CMIIW .... @Ahmad
gumuruh

否。您可以使用此代码。Bitmap imagenAndroid = BitmapFactory.decodeResource(getResources(),R.drawable.jellybean_statue);
艾哈迈德·阿加扎德

-3

获取图像位图的另一种方法是:

Bitmap imagenAndroid = BitmapFactory.decodeResource(getResources(),R.drawable.jellybean_statue);
imageView.setImageBitmap(imagenAndroid);

-10

试试这个代码:

Bitmap bitmap;
bitmap = ((BitmapDrawable)image.getDrawable()).getBitmap();

6
您能否描述@Arslan接受的答案的增强功能?
bummi

您最好解释一下为什么您的答案可以解决他的问题
Muhammed Refaat 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.