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();
Alex Semeniuk

2
때로는 일부 또는 모든 검은 색 픽셀이있는 비트 맵이 반환됩니다.

2
drawable / imageview에 적용한 경우 원본 비트 맵이나 필터링 된 비트 맵이 반환되지 않습니다.
DearDhruv

4
이미지가에서 ImageView설정 되면이 작동 URI합니까? imageView.setImageUri()
Hendra Anggrian 2016 년

1
@ praneethkumar 그것은 내 시나리오에서 작동합니다. 이 멋진 답변에 엄지 손가락!
Hendra Anggrian

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

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의 대답에 대한 개선점을 설명해 주시겠습니까?
부미

당신의 대답은 자신의 문제를 해결 이유를 더 설명 할 것
Muhammed Refaat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.