2014-11-11 20 views
19

Tôi muốn nhận được Bitmap từ ImageView. Tôi đã sử dụng mã sau đây, nhưng getDrawable() trả về giá trị rỗng. Cách nhận toàn bộ số Bitmap từ ImageView.Nhận Bitmap từ ImageView trong 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

Mã của bạn nên hoạt động, đảm bảo chế độ xem hình ảnh của bạn có thể vẽ được nếu bạn thiết lập hình ảnh bằng cách sử dụng setBackground setBitmap thay vì – elmorabea

Trả lời

15

Theo this answer, chỉ làm điều đó như thế này:

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

điều này không hoạt động hoàn hảo mọi lúc, thường cho Canvas: cố gắng sử dụng bitmap tái chế –

+0

Giải pháp này cùng với câu trả lời này (http://stackoverflow.com/questions/5566758/bitmap- from-textview-getdrawingcache-always-null) đã hoạt động cho tôi: imageView.measure (MeasureSpec.makeMeasureSpec (0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec (0, MeasureSpec.UNSPECIFIED)); imageView.layout (0, 0, imageView.getMeasuredWidth(), imageView.getMeasuredHeight()); – Roy

14

Nếu bạn chỉ muốn các Bitmap từ một ImageView mã sau đây có thể làm việc cho bạn: -

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

Thử chụp ảnh ở tất cả các phẩm chất có thể kéo các thư mục (drawable-hdpi/drawable-ldpi, v.v ..)

Có thể giả lập hoặc thiết bị mà bạn đang sử dụng có mật độ khác và đang cố kéo hình ảnh từ một thư mục khác.

Nếu bạn đang sử dụng tiện ích mở rộng trong hình ảnh của mình ngoài .png, .jpg hoặc .gif, Nó có thể không nhận ra các loại tiện ích mở rộng khác. http://developer.android.com/guide/topics/resources/drawable-resource.html

34

Hãy thử điều này:

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

Nếu bạn đang cố gắng để có được bitmap từ Glide hình ảnh nạp thì đây sẽ giúp bạn

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

Chụp ảnh của ImagView và chuyển đổi nó thành một chuỗi để gửi đến máy chủ

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; 
} 
Các vấn đề liên quan