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.