2013-03-06 45 views
16

Tôi đã cố gắng để đính kèm hình ảnh từ drawable một email (từ ứng dụng của tôi để ứng dụng Gmail)Làm thế nào để chuyển đổi một hình ảnh drawable từ nguồn lực để một Bitmap

Tôi đã thử mã tiếp theo:

 Intent emailintent2 = new Intent(android.content.Intent.ACTION_SEND_MULTIPLE); 
     emailintent2.setType("image/*"); 
     emailintent2.putExtra(Intent.EXTRA_EMAIL, emailaddress2); 
     emailintent2.putExtra(Intent.EXTRA_SUBJECT, CorAsunto); 
     emailintent2.putExtra(Intent.EXTRA_TEXT, message2); 

     ArrayList<Uri> uris = new ArrayList<Uri>(); 
     uris.add(Uri.parse("android.resource://" + getPackageName() + "/" + R.drawable.image1)); 
     uris.add(Uri.parse("android.resource://" + getPackageName() + "/" + R.drawable.image2)); 

     emailintent2.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris); 
     startActivity(emailintent2); 

Nhưng khi tôi đính kèm hình ảnh vào email tôi nhận được đính kèm mà không có phần mở rộng ".png" và đó là một vấn đề lớn.

Vì vậy, tôi nghĩ rằng trong cố gắng chuyển đổi hình ảnh Drawable này sang Bitmap và tôi cũng nghĩ rằng ArrayList sẽ phải là Bitmap. Tôi nghĩ rằng tôi sẽ nhận được hình ảnh có hình ảnh được xác định trong phần đính kèm.

Nếu có thể, ai đó có thể cho tôi biết cách thực hiện? Chuyển đổi sang Bitmap, thêm vào Arraylist và đính kèm hình ảnh.

Nếu tôi sai trong tất cả những gì tôi đã nói, ai đó có thể cho tôi giải pháp không? Tôi cần đính kèm hình ảnh từ Drawable vào email có phần mở rộng (.png).

+0

bạn đã thử ** getBitmap() ** – hakiko

+1

Sao chép và dán tiêu đề của bạn vào google: http://stackoverflow.com/questions/8717333 – dymmeh

+0

gooooooogle là câu trả lời! – lelloman

Trả lời

19
Drawable myDrawable = getResources().getDrawable(R.drawable.anImage); 
Bitmap anImage  = ((BitmapDrawable) myDrawable).getBitmap(); 

Ngoài ra, nó có thể được xác định trong tệp XML với phần tử <bitmap>.

+0

http://codingaffairs.blogspot.com/2016/06/how-to-convert-drawable-to-bitmap-in.html –

+0

điều này sẽ hiệu quả hơn các giải pháp khác, nhưng tôi thấy rằng getDrawable không được dùng nữa – usman

+0

@usman http://stackoverflow.com/a/29146895/1848929 – hakiko

5

đây là đoạn mã, chỉ cần kiểm tra xem nó ra:

Bitmap Icon = BitmapFactory.decodeResource(getResources(), R.drawable.large_icon); 
6

Các trực tiếp Cách thứ nhất là:

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image); 

Bạn có thể cấu hình bitmap hơn nếu bạn định nghĩa nó trong Tệp có thể kéo .xml dưới dạng:

<?xml version="1.0" encoding="utf-8"?> 
<bitmap 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:src="@[package:]drawable/drawable_resource" 
    android:antialias=["true" | "false"] 
    android:dither=["true" | "false"] 
    android:filter=["true" | "false"] 
    android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" | 
         "fill_vertical" | "center_horizontal" | "fill_horizontal" | 
         "center" | "fill" | "clip_vertical" | "clip_horizontal"] 
    android:mipMap=["true" | "false"] 
    android:tileMode=["disabled" | "clamp" | "repeat" | "mirror"] /> 
4
Bitmap icon = BitmapFactory.decodeResource(mContext.getResources(), 
      R.drawable.ic_launcher); 

Trường hợp mContext là hoạt động của bạn Bối cảnh.

32

Có 3 cách để thực hiện chuyển đổi:

  1. Đặt ImageView với resource image

    imageView.setImageResource(R.drawable.icon); 
    

    và sau đó nhận được bitmap từ IMAGExem

    Bitmap bitmap = ((BitmapDrawable)image.getDrawable()).getBitmap(); 
    
  2. Lấy nguồn drawable trực tiếp bởi Resource ID

    Bitmap icon = BitmapFactory.decodeResource(getResources(),R.drawable.profile_circle); 
    
  3. Đặt hình ảnh trên ImageView sau đó chuyển đổi nó thành Bitmap (chỉ hoạt động cho svg/VectorDrawable quá)

    ImageView imgView = (ImageView) findViewById(R.id.ImageView); 
    imgView.setImageResource(R.drawable.abc_image); 
    z.setDrawingCacheEnabled(true); 
    Bitmap bitmap = Bitmap.createBitmap(v.getDrawingCache()); 
    
Các vấn đề liên quan