如何将可绘制的图像从资源转换为位图

我正尝试将Drawable的图像附加到电子邮件(从我的应用程序到Gmail应用程序)

我已经尝试了下一个代码:

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

但是,当我把图像附加到电子邮件时,我得到的附件没有扩展名“.png”,这是一个大问题。

所以我想在尝试将此可绘制图像转换为位图,也认为ArrayList必须是位图。 我认为我会得到附件中定义的图像。

如果有可能的话,有人可以告诉我该怎么做吗? 转换为位图,添加到Arraylist并附加图像。

如果我说的都是错的,有人可以给我一个解决办法吗? 我需要将图像从Drawable附加到带有扩展名(.png)的电子邮件中。

有3种方法可以进行转换:

  1. 使用resource image设置ImageView

     imageView.setImageResource(R.drawable.icon); 

    然后从imageView获取位图

     Bitmap bitmap = ((BitmapDrawable)image.getDrawable()).getBitmap(); 
  2. 通过Resource ID直接获取可绘制资源

     Bitmap icon = BitmapFactory.decodeResource(getResources(),R.drawable.profile_circle); 
  3. ImageView上设置图像,然后将其转换为Bitmap (也适用于svg / VectorDrawable)

     ImageView imgView = (ImageView) findViewById(R.id.ImageView); imgView.setImageResource(R.drawable.abc_image); z.setDrawingCacheEnabled(true); Bitmap bitmap = Bitmap.createBitmap(v.getDrawingCache()); 
 Drawable myDrawable = getResources().getDrawable(R.drawable.anImage); Bitmap anImage = ((BitmapDrawable) myDrawable).getBitmap(); 

也可以用<bitmap>元素在XML文件中定义它。

直接的方法是:

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

如果您将.xml可绘制文件定义为:

 <?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"] /> 

这里是一段代码,只是检查一下:

 Bitmap Icon = BitmapFactory.decodeResource(getResources(), R.drawable.large_icon); 
 Bitmap icon = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.ic_launcher); 

其中mContext是您的活动上下文。