Frage Wie konvertiert man eine Drawable in eine Bitmap?


Ich würde gerne ein bestimmtes setzen Drawable Wie das Hintergrundbild des Geräts, aber alle Hintergrundfunktionen akzeptieren Bitmapnur s. Ich kann nicht benutzen WallpaperManager weil ich vor 2.1 bin.

Außerdem werden meine Zeichen aus dem Internet heruntergeladen und befinden sich nicht darin R.drawable.


795
2018-06-14 07:46


Ursprung


Antworten:


Dieser Code hilft.

Bitmap icon = BitmapFactory.decodeResource(context.getResources(),
                                           R.drawable.icon_resource);

Hier eine Version, in der das Bild heruntergeladen wird.

String name = c.getString(str_url);
URL url_value = new URL(name);
ImageView profile = (ImageView)v.findViewById(R.id.vdo_icon);
if (profile != null) {
    Bitmap mIcon1 =
        BitmapFactory.decodeStream(url_value.openConnection().getInputStream());
    profile.setImageBitmap(mIcon1);
}

1134
2018-06-14 08:32



public static Bitmap drawableToBitmap (Drawable drawable) {
    Bitmap bitmap = null;

    if (drawable instanceof BitmapDrawable) {
        BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
        if(bitmapDrawable.getBitmap() != null) {
            return bitmapDrawable.getBitmap();
        }
    }

    if(drawable.getIntrinsicWidth() <= 0 || drawable.getIntrinsicHeight() <= 0) {
        bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); // Single color bitmap will be created of 1x1 pixel
    } else {
        bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
    }

    Canvas canvas = new Canvas(bitmap);
    drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
    drawable.draw(canvas);
    return bitmap;
}

650
2018-05-15 12:33



Dies konvertiert ein BitmapDrawable in ein Bitmap.

Drawable d = ImagesArrayList.get(0);  
Bitmap bitmap = ((BitmapDrawable)d).getBitmap();

195
2018-06-14 09:33



EIN Drawable kann auf eine gezeichnet werden Canvas, und ein Canvas kann von einem unterstützt werden Bitmap:

(Aktualisiert, um eine schnelle Konvertierung für BitmapDrawables und um sicherzustellen, dass die Bitmap erstellt hat eine gültige Größe)

public static Bitmap drawableToBitmap (Drawable drawable) {
    if (drawable instanceof BitmapDrawable) {
        return ((BitmapDrawable)drawable).getBitmap();
    }

    int width = drawable.getIntrinsicWidth();
    width = width > 0 ? width : 1;
    int height = drawable.getIntrinsicHeight();
    height = height > 0 ? height : 1;

    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap); 
    drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
    drawable.draw(canvas);

    return bitmap;
}

126
2018-02-22 07:35



Benutze diesen Code:

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

69
2017-11-20 18:58



sehr einfach

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

31
2018-03-21 18:21



METHODE 1 : Entweder können Sie direkt in Bitmap wie folgt konvertieren

Bitmap myLogo = BitmapFactory.decodeResource(context.getResources(), R.drawable.my_drawable);

Methode 2 : Sie können sogar die Ressource in die Zeichnungsdatei konvertieren und daraus eine Bitmap erstellen

Bitmap myLogo = ((BitmapDrawable)getResources().getDrawable(R.drawable.logo)).getBitmap();

Für API> 22 getDrawable Methode verschoben auf die ResourcesCompat Klasse, damit du so etwas machst

Bitmap myLogo = ((BitmapDrawable) ResourcesCompat.getDrawable(context.getResources(), R.drawable.logo, null)).getBitmap();

13
2018-02-02 05:22



Vielleicht hilft das jemandem ...

Verwenden Sie von PictureDrawable zu Bitmap:

private Bitmap pictureDrawableToBitmap(PictureDrawable pictureDrawable){ 
    Bitmap bmp = Bitmap.createBitmap(pictureDrawable.getIntrinsicWidth(), pictureDrawable.getIntrinsicHeight(), Config.ARGB_8888); 
    Canvas canvas = new Canvas(bmp); 
    canvas.drawPicture(pictureDrawable.getPicture()); 
    return bmp; 
}

... als solche implementiert:

Bitmap bmp = pictureDrawableToBitmap((PictureDrawable) drawable);

12
2018-02-08 19:08



Nachdem sie die anderen Antworten betrachtet (und benutzt haben), scheinen sie alle zu handeln ColorDrawable und PaintDrawable schlecht. (Besonders auf Lollipop) schien das Shaders wurden optimiert, so dass feste Farbblöcke nicht korrekt behandelt wurden.

Ich verwende jetzt den folgenden Code:

public static Bitmap drawableToBitmap(Drawable drawable) {
    if (drawable instanceof BitmapDrawable) {
        return ((BitmapDrawable) drawable).getBitmap();
    }

    // We ask for the bounds if they have been set as they would be most
    // correct, then we check we are  > 0
    final int width = !drawable.getBounds().isEmpty() ?
            drawable.getBounds().width() : drawable.getIntrinsicWidth();

    final int height = !drawable.getBounds().isEmpty() ?
            drawable.getBounds().height() : drawable.getIntrinsicHeight();

    // Now we check we are > 0
    final Bitmap bitmap = Bitmap.createBitmap(width <= 0 ? 1 : width, height <= 0 ? 1 : height,
            Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
    drawable.draw(canvas);

    return bitmap;
}

Im Gegensatz zu den anderen, wenn Sie anrufen setBounds auf der Drawable Bevor Sie es in eine Bitmap umwandeln, wird die Bitmap in der richtigen Größe gezeichnet!


10
2017-12-18 09:54