ImageViewにアタッチされたビットマップを取得する


314

与えられた

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

ビットマップを取得することは可能ですか?


1
はい、可能です。画像をクリックすると、この要件が必要な場合はお知らせください。
RajaReddy PolamReddy

回答:


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

34
image.getDrawable()実際にキャストできるかどうかを確認するように注意してくださいBitmapDrawable(を回避するためIllegalCastExceptions)。例えば、あなたがあなたのイメージにレイヤーを使用する場合は、このスニペットは若干異なります:Bitmap bitmap = ((BitmapDrawable)((LayerDrawable)image.getDrawable()).getDrawable(0)).getBitmap();
アレックスSemeniuk

2
これは、時々、一部またはすべての黒いピクセルを含むビットマップを返します。

2
ドローアブル/イメージビューに適用した場合、これは元のビットマップもフィルタリングされたビットマップも返しません。
DearDhruv 2013年

4
で画像ImageViewが設定されている場合、これは機能しURIますか?imageView.setImageUri()
Hendra Anggrian

1
@praneethkumarそれは私のシナリオで動作します。この素晴らしい答えに賛成です!
Hendra Anggrian 16

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、2011年

2
nullを返します。実際に表示するために、ページをリロードする必要がある場合があります。
レモン

3
nullポインターを与えます。:(この行:Bitmap bmap = Bitmap.createBitmap(mImageView.getDrawingCache());
Azurespot

drawingCacheはKotlinで非推奨になりました
Raju yourPepe

3

コードの下に書く

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

AppCompatImageViewをandroid.graphics.drawable.BitmapDrawableにキャストできません
Billyjoker

1

探している人のためにKotlin取得するためのソリューションBitmapからImageView

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);
Ahmad Aghazadeh

-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 '19
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.