Dapatkan Bitmap terhubung ke ImageView


314

Diberikan

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

Apakah mungkin untuk mengambil bitmap?


1
ya itu, mungkin ketika Anda mengklik gambar kita akan mendapatkan bahwa jika Anda ingin persyaratan ini beri tahu saya.
— RajaReddy PolamReddy

Jawaban:


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

34
Berhati-hatilah untuk memeriksa apakah Anda image.getDrawable()benar-benar dapat dilemparkan ke BitmapDrawable(untuk menghindari IllegalCastExceptions). Jika, misalnya, Anda menggunakan lapisan pada gambar Anda maka cuplikan ini akan sedikit berbeda:Bitmap bitmap = ((BitmapDrawable)((LayerDrawable)image.getDrawable()).getDrawable(0)).getBitmap();
— Alex Semeniuk

2
Ini akan, kadang-kadang, mengembalikan bitmap dengan beberapa atau semua piksel hitam.

2
ini tidak akan mengembalikan bitmap asli atau bitmap yang difilter jika Anda telah menerapkan pada drawable / imageview.
— DearDhruv

4
apakah ini berfungsi jika gambar dalam ImageViewdiatur dari URI? imageView.setImageUri()
— Hendra Anggrian

1
@pethethkumar itu berfungsi dalam skenario saya. Jempol untuk jawaban yang luar biasa ini!
— Hendra Anggrian

46

Ini akan memberi Anda Bitmapdari ImageView. Padahal, itu bukan objek bitmap yang sama yang telah Anda tetapkan. Itu yang baru.

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

=== EDIT ===

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

ketika "tidak berhasil", apa yang terjadi? Apakah mengembalikan nol atau membuang pengecualian atau apa?
— Sarwar Erfan

2
mengembalikan nol. terkadang saya harus memuat ulang halaman agar benar-benar muncul.
— lemon

3
Memberi saya sebuah pointer nol. :( Pada baris ini:Bitmap bmap = Bitmap.createBitmap(mImageView.getDrawingCache());
— Azurespot

drawingCache sudah tidak digunakan lagi di Kotlin
— Raju yourPepe

3

Tulis kode di bawah ini

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

saya mendapatkan AppCompatImageView tidak dapat dilemparkan ke android.graphics.drawable.BitmapDrawable
— Billyjoker

1

Bagi mereka yang mencari Kotlinsolusi untuk mendapatkan Bitmapdari ImageView.

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

saya mendapatkan AppCompatImageView tidak dapat dilemparkan ke android.graphics.drawable.BitmapDrawable
— Billyjoker

0

Kode ini lebih baik.

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

apakah itu imageView.getDrawable (); -> Berarti mendapatkan gambar dari folder yang dapat digambar? CMIIW .... @Ahmad
— gumuruh

Anda dapat menggunakan kode ini. Bitmap imagenAndroid = BitmapFactory.decodeResource(getResources(),R.drawable.jellybean_statue);
— Ahmad Aghazadeh

-3

Cara lain untuk mendapatkan bitmap gambar adalah dengan melakukan ini:

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

-10

coba kode ini:

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

6
Bisakah Anda menjelaskan peningkatan dari jawaban yang diterima @Arslan?
— bummi

Anda sebaiknya menjelaskan mengapa jawaban Anda memecahkan masalahnya
— Muhammed Refaat
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.