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?


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

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

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

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

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

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

-10

Versuchen Sie diesen Code:

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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.