2014-11-11 6 views
19

Ich möchte Bitmap von ImageView erhalten. Ich habe folgenden Code verwendet, aber getDrawable() gibt null zurück. Wie bekomme ich das ganze Bitmap von ImageView.Get Bitmap von ImageView in Android L

Bitmap bitmap; 
if (mImageViewer.getDrawable() instanceof BitmapDrawable) { 
    bitmap = ((BitmapDrawable) mImageViewer.getDrawable()).getBitmap(); 
} else { 
    Drawable d = mImageViewer.getDrawable(); 
    bitmap = Bitmap.createBitmap(d.getIntrinsicWidth(), d.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(bitmap); 
    d.draw(canvas); 
} 
storeImage(bitmap,"final.jpeg"); 
+1

Ihr Code sollte funktionieren, stellen Sie sicher, dass Ihre Bildansicht eine Zeichenfläche hat, wenn Sie sind Setzen Sie das Bild mit setBackground verwenden setBitmap stattdessen – elmorabea

Antwort

15

Nach this answer, tun Sie es einfach wie folgt aus:

imageView.buildDrawingCache(); 
Bitmap bmap = imageView.getDrawingCache(); 
+2

das funktioniert nicht immer perfekt, geben Canvas: versuchen, recycelte Bitmap zu verwenden –

+0

Diese Lösung zusammen mit dieser Antwort (http://stackoverflow.com/questions/5566758/bitmap- from-textview-getdrawingcache-always-null) funktionierte für mich: imageView.measure (MeasureSpec.makeMeasureSpec (0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec (0, MeasureSpec.UNSPECIFIED)); imageView.layout (0, 0, imageView.getMeasuredWidth(), imageView.getMeasuredHeight()); – Roy

14

Wenn Sie nur die Bitmap von einem Image der folgende Code kann für Sie arbeiten wollen: -

Bitmap bm=((BitmapDrawable)imageView.getDrawable()).getBitmap();

Versuchen Sie, das Bild in allen Zeichenqualitäten zu haben Ordner (ziehbar-hdpi/ziehbar-LDPI etc.)

Könnten sein, dass der Emulator oder Gerät, um Ihre Verwendung eine andere Dichte hat und versucht, Bilder aus einem anderen Ordner zu ziehen.

Wenn Sie in Ihrem Bild eine andere Erweiterung als .png, .jpg oder .gif verwenden, erkennt sie möglicherweise andere Erweiterungstypen nicht. http://developer.android.com/guide/topics/resources/drawable-resource.html

34

Versuchen Sie folgendes:

BitmapDrawable drawable = (BitmapDrawable) imageView.getDrawable(); 
Bitmap bitmap = drawable.getBitmap(); 
3

Wenn Sie versuchen, Bitmap aus Glide geladen Bild zu erhalten, dann wird dies helfen Ihnen

Drawable dr = ((ImageView) imView).getDrawable(); 
     Bitmap bmp = ((GlideBitmapDrawable)dr.getCurrent()).getBitmap(); 
0

ein Bild von der ImagView nehmen und es in eine Zeichenfolge konvertieren Senden an den Server

ImageView ivImage1 = (ImageView) findViewById(R.id.img_add1_send); 


        getStringImage(((BitmapDrawable) ivImage1.getDrawable()).getBitmap()), 



public String getStringImage(Bitmap bm){ 
    ByteArrayOutputStream ba=new ByteArrayOutputStream(); 
    bm.compress(Bitmap.CompressFormat.PNG,90,ba); 
    byte[] by=ba.toByteArray(); 
    String encod= Base64.encodeToString(by,Base64.DEFAULT); 
    return encod; 
}