web-dev-qa-db-fra.com

Comment convertir une image dessinable des ressources en un bitmap

J'essayais de joindre des images de Drawable à un e-mail (de mon application à l'application Gmail)

J'ai essayé le code suivant:

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

Mais quand je joins l'image à l'e-mail, je reçois la pièce jointe sans l'extension ".png" et c'est un gros problème.

Donc, je pense que pour essayer de convertir ces images dessinables en Bitmap et aussi je pense que l'ArrayList devra être Bitmap. Je pense que je vais obtenir l'image a l'image définie dans la pièce jointe.

Si c'est possible, quelqu'un peut-il me dire comment le faire? Convertissez en Bitmap, ajoutez à Arraylist et attachez l'image.

Si je me trompe dans tout ce que j'ai dit, quelqu'un peut-il me donner une solution? J'ai besoin de joindre les images de Drawable à l'e-mail avec l'extension (.png).

23
Roberto Zuniga

Il existe 3 façons d'effectuer la conversion:

  1. Définissez ImageView avec resource image

    imageView.setImageResource(R.drawable.icon);
    

    puis récupérez le bitmap depuis imageView

    Bitmap bitmap = ((BitmapDrawable)image.getDrawable()).getBitmap();
    
  2. Obtenez la ressource à dessiner directement par Resource ID

    Bitmap icon = BitmapFactory.decodeResource(getResources(),R.drawable.profile_circle);
    
  3. Définissez l'image sur ImageView puis convertissez-la en Bitmap (fonctionne également pour svg/VectorDrawable)

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

Il peut également être défini dans un fichier XML avec le <bitmap> élément.

29
hakiko

voici le morceau de code, il suffit de le vérifier:

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

Où mContext est votre Contexte d'activité.

6
Rakesh

La manière directe est:

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

Vous pouvez configurer davantage le bitmap si vous le définissez dans un fichier dessinable .xml comme:

<?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"] />
6
Mahmoud Shahoud
public Bitmap convertToBitmap(Drawable drawable, int widthPixels, int heightPixels) {
    Bitmap mutableBitmap = Bitmap.createBitmap(widthPixels, heightPixels, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(mutableBitmap);
    drawable.setBounds(0, 0, widthPixels, heightPixels);
    drawable.draw(canvas);

    return mutableBitmap;
}

de https://msol.io/blog/Android/android-convert-drawable-to-bitmap/ a fonctionné pour moi.

0
Alon Bresler