ImageView'e Bitmap ekleyin


314

verilmiş

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

Bitmap'i almak mümkün müdür?


1
evet bu, u u tıklayın görüntü üzerinde biz olsun bu gereksinimi istiyorsanız bana bildirin.
RajaReddy PolamReddy

Yanıtlar:


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

34
(Kaçınılması ) image.getDrawable()için gerçekten atılabilir olup olmadığını kontrol etmek için dikkatli olun . Örneğin, görüntünüzde katmanlar kullanıyorsanız, bu snippet biraz farklı olacaktır:BitmapDrawableIllegalCastExceptionsBitmap bitmap = ((BitmapDrawable)((LayerDrawable)image.getDrawable()).getDrawable(0)).getBitmap();
Alex Semeniuk

2
Bu, bazen, siyah piksellerin bir kısmının veya tamamının bulunduğu bir bitmap döndürür.

2
çizilebilir / görüntülemeye uyguladıysanız orijinal bitmap veya filtrelenmiş bitmap döndürmez.
DearDhruv

4
içinde resim ImageViewayarlanırsa bu nasıl çalışır URI? imageView.setImageUri()
Hendra Anggrian

1
@praneethkumar benim senaryomda çalışıyor. Bu harika cevap için beğen!
Hendra Anggrian

46

Bu sizi bir Bitmapalacak ImageView. Yine de, ayarladığınız aynı bitmap nesnesi değildir. Yeni bir tane.

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

=== DÜZENLE ===

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

"işe yaramazsa" ne olur? Boş döndürür veya istisna atar mı ya da ne?
Sarwar Erfan

2
null değerini döndürür. bazen gerçekte görünmesi için sayfayı yeniden yüklemem gerekir.
Limon

3
Bana bir boş gösterici verir. :( Bu hatta:Bitmap bmap = Bitmap.createBitmap(mImageView.getDrawingCache());
Azurespot

drawingCache Kotlin'de kullanımdan kaldırıldı
Raju yourPepe

3

Aşağıdaki kodu yazın

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



0

Bu kod daha iyi.

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 (); -> resmi çekilebilir klasörden almak anlamına mı geliyor? CMIIW .... @Ahmad
gumuruh

Hayır. Bu kodu kullanabilirsiniz. Bitmap imagenAndroid = BitmapFactory.decodeResource(getResources(),R.drawable.jellybean_statue);
Ahmad Aghazadeh

-3

Bir görüntünün bitmap'ini almanın diğer yolu bunu yapmaktır:

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

-10

bu kodu deneyin:

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

6
@Arslan'ın kabul edilen cevabı üzerindeki artışı açıklar mısınız?
bummi

cevabının neden problemini çözdüğünü
açıklasan iyi olur
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.