Dapatkan Bitmap terhubung ke ImageView

314

Diberikan

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

Apakah mungkin untuk mengambil bitmap?

lemon
sumber
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();
Arslan Anwar
sumber
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);
Sarwar Erfan
sumber
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();
Pankaj Talaviya
sumber
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
Asad Ali Choudhry
sumber
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();
    }
Ahmad Aghazadeh
sumber
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);
Hermes Trismegisto
sumber
-10

coba kode ini:

Bitmap bitmap;
bitmap = ((BitmapDrawable)image.getDrawable()).getBitmap();
Droid_Mekanika
sumber
6
Bisakah Anda menjelaskan peningkatan dari jawaban yang diterima @Arslan?
bummi
Anda sebaiknya menjelaskan mengapa jawaban Anda memecahkan masalahnya
Muhammed Refaat