webentwicklung-frage-antwort-db.com.de

BitmapFactory.decodeResource () gibt null für eine in xml drawable definierte Form zurück

Ich habe mehrere ähnliche Fragen durchgesehen, obwohl ich auf meine Frage keine passende Antwort gefunden habe.

Ich habe eine gezeichnete, in shape.xml definierte

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:shape="rectangle" >

    <solid Android:color="@color/bg_color" />
</shape>

Ich möchte es in ein Bitmap-Objekt konvertieren, um einige Operationen auszuführen, aber BitmapFactory.decodeResource() gibt null zurück.

So mache ich es:

Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.shape);

Was mache ich falsch? Ist BitmapFactory.decodeResource() für XML-definierte Drawables anwendbar?

29
mol

Da Sie eine Drawable und keine Bitmap laden möchten, verwenden Sie Folgendes:

Drawable d = getResources().getDrawable(R.drawable.your_drawable, your_app_theme);

Um daraus eine Bitmap zu machen:

public static Bitmap drawableToBitmap (Drawable drawable) {

    if (drawable instanceof BitmapDrawable) {
        return ((BitmapDrawable)drawable).getBitmap();
    }

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

    return bitmap;
}

Aus: Wie konvertiere ich ein Drawable in ein Bitmap?

51
Philipp Jahoda
public static Bitmap convertDrawableResToBitmap(@DrawableRes int drawableId, Integer width, Integer height) {
    Drawable d = getResources().getDrawable(drawableId);

    if (d instanceof BitmapDrawable) {
        return ((BitmapDrawable) d).getBitmap();
    }

    if (d instanceof GradientDrawable) {
        GradientDrawable g = (GradientDrawable) d;

        int w = d.getIntrinsicWidth() > 0 ? d.getIntrinsicWidth() : width;
        int h = d.getIntrinsicHeight() > 0 ? d.getIntrinsicHeight() : height;

        Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        g.setBounds(0, 0, w, h);
        g.setStroke(1, Color.BLACK);
        g.setFilterBitmap(true);
        g.draw(canvas);
        return bitmap;
    }

    Bitmap bit = BitmapFactory.decodeResource(getResources(), drawableId);
    return bit.copy(Bitmap.Config.ARGB_8888, true);
}

//------------------------

Bitmap b = convertDrawableResToBitmap(R.drawable.myDraw , 50, 50);
1
Ali Bagheri

Sie haben vielleicht .xml in Verzeichnis: .../drawable-24 und versuche es in .../drawable stattdessen.

es funktioniert bei mir, hoffe das kann jemandem helfen.

0
Raindeavor

es ist eine Zeichnung, keine Bitmap. Sie sollten stattdessen getDrawable verwenden

0
Blackbelt