Как преобразовать Drawable изображение из ресурсов в Bitmap

Я пытался прикреплять изображения от 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", и это большая проблема.

Поэтому я думаю, что в попытке конвертировать эти Drawable изображения в Bitmap, а также я думаю, что ArrayList должен быть растровым. Я думаю, что я получу изображение с изображением, определенным в приложении.

Если это возможно, может кто-нибудь сказать мне, как это сделать? Преобразуйте в Bitmap, добавьте в Arraylist и прикрепите изображение.

Если я ошибаюсь во всем, что я сказал, может ли кто-нибудь дать мне решение? Мне нужно прикрепить изображения от Drawable к электронному письму с расширением (.png).

Ответ 1

Существует три способа преобразования:

  • Установите ImageView с помощью resource image

    imageView.setImageResource(R.drawable.icon);
    

    а затем получить растровое изображение из imageView

    Bitmap bitmap = ((BitmapDrawable)image.getDrawable()).getBitmap();
    
  • Получите ресурс, который можно вытащить непосредственно, Resource ID

    Bitmap icon = BitmapFactory.decodeResource(getResources(),R.drawable.profile_circle);
    
  • Задайте изображение на 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());
    

Ответ 2

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

Также он может быть определен в XML файле с элементом <bitmap>.

Ответ 3

прямой способ:

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

Вы можете настроить растровое изображение больше, если вы определяете его в .xml drawable file как:

<?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(getResources(), R.drawable.large_icon);

Ответ 5

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

Где mContext - это ваш контекст активности.