2014-11-11 18 views
19

Chcę uzyskać Bitmap z ImageView. Użyłem następujący kod, ale getDrawable() zwraca wartość null. Jak uzyskać cały Bitmap od ImageView.Uzyskaj bitmapę z ImageView w Androidzie 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

Twój kod powinien zadziałać, upewnij się, że widok obrazu ma możliwość losowania, jeśli jesteś ustawianie obrazu przy użyciu setBackground użyj setBitmap zamiast – elmorabea

Odpowiedz

15

Według this answer, zrób to tak:

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

to nie działa idealnie przez cały czas, zwykle daje Canvas: próbując użyć zrekultywowanej mapy bitowej –

+0

To rozwiązanie wraz z tą odpowiedzią (http://stackoverflow.com/questions/5566758/bitmap- z-TextView-getdrawingcache-zawsze-null) pracował dla mnie: imageView.measure (MeasureSpec.makeMeasureSpec (0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec (0, MeasureSpec.UNSPECIFIED)); imageView.layout (0, 0, imageView.getMeasuredWidth(), imageView.getMeasuredHeight()); – Roy

14

Jeśli chcesz tylko mapy bitowej o ImageView następujący kod może pracować dla Ciebie: -

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

Spróbuj mieć obraz we wszystkich możliwych do wyciągnięcia cechach foldery (drawable-hdpi/drawable-ldpi itp.)

Możliwe, że emulator lub urządzenie, z którego korzysta użytkownik ma inną gęstość i próbuje pobrać obrazy z innego folderu.

Jeśli używasz rozszerzenia na obrazie innego niż .png, .jpg lub .gif, Może nie rozpoznać innych typów rozszerzeń. http://developer.android.com/guide/topics/resources/drawable-resource.html

34

Spróbuj tego:

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

Jeśli próbujesz uzyskać bitmapy z Glide załadowanego obrazu potem to pomoże Ci

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

Zrób zdjęcie z ImagView i przekonwertować go na sznurku wysłać na serwer:

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