Holen Sie sich Bitmap an ImageView angehängt

314

Gegeben

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

Ist es möglich, die Bitmap abzurufen?

Zitrone
quelle
1
Ja, es ist möglich, wenn du auf das Bild klickst. Wenn du diese Anforderung willst, lass es mich wissen.
RajaReddy PolamReddy

Antworten:

809
Bitmap bitmap = ((BitmapDrawable)image.getDrawable()).getBitmap();
Arslan Anwar
quelle
34
Überprüfen Sie sorgfältig, ob Sie image.getDrawable()tatsächlich besetzt werden können BitmapDrawable(um dies zu vermeiden IllegalCastExceptions). Wenn Sie beispielsweise Ebenen in Ihrem Bild verwenden, unterscheidet sich dieses Snippet geringfügig:Bitmap bitmap = ((BitmapDrawable)((LayerDrawable)image.getDrawable()).getDrawable(0)).getBitmap();
Alex Semeniuk
2
Dies gibt gelegentlich eine Bitmap mit einigen oder allen schwarzen Pixeln zurück.
2
Dies gibt weder die ursprüngliche Bitmap noch die gefilterte Bitmap zurück, wenn Sie auf die Zeichen- / Bildansicht angewendet haben.
DearDhruv
4
funktioniert das, wenn image in von gesetzt ImageViewist URI? imageView.setImageUri()
Hendra Anggrian
1
@praneethkumar funktioniert es in meinem Szenario. Daumen hoch für diese tolle Antwort!
Hendra Anggrian
46

Dies wird Ihnen eine Bitmapvon der bekommen ImageView. Es ist jedoch nicht dasselbe Bitmap-Objekt, das Sie festgelegt haben. Es ist neu.

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

=== BEARBEITEN ===

 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
quelle
Was passiert, wenn es "nicht funktioniert"? Gibt es null zurück oder löst eine Ausnahme aus oder was?
Sarwar Erfan
2
es gibt null zurück. Manchmal muss ich die Seite neu laden, damit sie tatsächlich angezeigt wird.
Zitrone
3
Gibt mir einen Nullzeiger. :( In dieser Zeile:Bitmap bmap = Bitmap.createBitmap(mImageView.getDrawingCache());
Azurespot
DrawingCache ist in Kotlin
Raju yourPepe
3

Schreiben Sie den folgenden Code

ImageView yourImageView = (ImageView) findViewById(R.id.yourImageView);
Bitmap bitmap = ((BitmapDrawable)yourImageView.getDrawable()).getBitmap();
Pankaj Talaviya
quelle
Ich bekomme AppCompatImageView kann nicht in android.graphics.drawable.BitmapDrawable
Billyjoker
1

Für diejenigen, die suchen KotlinLösung zu erhalten , Bitmapaus ImageView.

var bitmap = (image.drawable as BitmapDrawable).bitmap
Asad Ali Choudhry
quelle
Ich bekomme AppCompatImageView kann nicht in android.graphics.drawable.BitmapDrawable
Billyjoker
0

Dieser Code ist besser.

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
quelle
ist es imageView.getDrawable (); -> bedeutet das Bild aus dem Zeichenordner zu bekommen? CMIIW .... @Ahmad
gumuruh
Nein, Sie können diesen Code verwenden. Bitmap imagenAndroid = BitmapFactory.decodeResource(getResources(),R.drawable.jellybean_statue);
Ahmad Aghazadeh
-3

Eine andere Möglichkeit, eine Bitmap eines Bildes zu erhalten, besteht darin, Folgendes zu tun:

Bitmap imagenAndroid = BitmapFactory.decodeResource(getResources(),R.drawable.jellybean_statue);
imageView.setImageBitmap(imagenAndroid);
Hermes Trismegisto
quelle
-10

Versuchen Sie diesen Code:

Bitmap bitmap;
bitmap = ((BitmapDrawable)image.getDrawable()).getBitmap();
Droid_Mechanic
quelle
6
Können Sie die Verbesserung gegenüber der akzeptierten Antwort von @Arslan beschreiben?
Bummi
Sie sollten besser erklären, warum Ihre Antwort sein Problem löst
Muhammed Refaat