Nhận Bitmap gắn liền với ImageView


314

Được

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

Có thể lấy bitmap không?


1
vâng, có thể khi bạn nhấp vào hình ảnh, chúng tôi sẽ nhận được nếu bạn muốn yêu cầu này cho tôi biết.
RajaReddy PolamReddy

Câu trả lời:


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

34
Hãy cẩn thận để kiểm tra nếu bạn image.getDrawable()thực sự có thể được đúc BitmapDrawable(để tránh IllegalCastExceptions). Ví dụ: nếu bạn sử dụng các lớp trong hình ảnh của mình thì đoạn trích này sẽ hơi khác một chút:Bitmap bitmap = ((BitmapDrawable)((LayerDrawable)image.getDrawable()).getDrawable(0)).getBitmap();
Alex Semeniuk

2
Điều này, đôi khi, sẽ trả về một bitmap với một số hoặc tất cả các pixel đen.

2
điều này sẽ không trả về bitmap gốc cũng như bitmap đã lọc nếu bạn đã áp dụng trên drawable / fanteview.
DearDhruv

4
điều này có hoạt động không nếu hình ảnh trong ImageViewđược đặt từ URI? imageView.setImageUri()
Hendra Anggrian

1
@praneethkumar nó hoạt động trong kịch bản của tôi. Thumbs up cho câu trả lời tuyệt vời này!
Hendra Anggrian

46

Điều này sẽ giúp bạn có được Bitmaptừ ImageView. Mặc dù vậy, nó không phải là cùng một đối tượng bitmap mà bạn đã đặt. Nó là một cái mới.

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

=== CHỈNH SỬA ===

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

Khi nó "không hoạt động", điều gì xảy ra? Nó trả về null hoặc ném ngoại lệ hay gì?
Sarwar Erfan

2
nó trả về null. đôi khi tôi phải tải lại trang để nó thực sự xuất hiện.
chanh

3
Cung cấp cho tôi một con trỏ null. :( Trên dòng này:Bitmap bmap = Bitmap.createBitmap(mImageView.getDrawingCache());
Azurespot

drawCache không được dùng nữa trong Kotlin
Raju yourPepe

3

Viết mã dưới đây

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

Tôi nhận được AppCompatImageView không thể chuyển sang android.graphics.drawable.BitmapDrawable
Billyjoker

1

Đối với những người đang tìm kiếm Kotlingiải pháp để có được Bitmaptừ ImageView.

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

Tôi nhận được AppCompatImageView không thể chuyển sang android.graphics.drawable.BitmapDrawable
Billyjoker

0

Mã này là tốt hơn.

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();
    }

có phải là imageView.getDrawable (); -> có nghĩa là lấy hình ảnh từ thư mục drawable? CMIIW .... @Ahmad
gumuruh

Không. Bạn có thể sử dụng mã này. Bitmap imagenAndroid = BitmapFactory.decodeResource(getResources(),R.drawable.jellybean_statue);
Ahmad Aghazadeh

-3

Một cách khác để có được một bitmap của một hình ảnh là làm điều này:

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

-10

thử mã này:

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

6
Bạn có thể mô tả sự nâng cao về câu trả lời được chấp nhận của @Arslan không?
bummi

bạn nên giải thích rõ hơn lý do tại sao câu trả lời của bạn giải quyết vấn đề của anh ấy
Muhammed Refaat
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.