1095 Stimmen

Wie konvertiert man ein Drawable in ein Bitmap?

Ich möchte eine bestimmte Drawable als Hintergrundbild des Geräts, aber alle Hintergrundbildfunktionen akzeptieren Bitmap s nur. Ich kann nicht verwenden WallpaperManager weil ich vor 2.1 bin.

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

1 Stimmen

2 Stimmen

Bitte wählen Sie die richtige Antwort, nämlich diese: stackoverflow.com/a/3035869/4548520

1 Stimmen

6voto

John Doe Punkte 753

BitmapFactory.decodeResource() skaliert die Bitmap automatisch, so dass die Bitmap unscharf werden kann. Um die Skalierung zu verhindern, gehen Sie folgendermaßen vor:

BitmapFactory.Options options = new BitmapFactory.Options();
options.inScaled = false;
Bitmap source = BitmapFactory.decodeResource(context.getResources(),
                                             R.drawable.resource_name, options);

ou

InputStream is = context.getResources().openRawResource(R.drawable.resource_name)
bitmap = BitmapFactory.decodeStream(is);

5voto

anupam sharma Punkte 1735

Verwenden Sie diesen Code. Er wird Ihnen helfen, Ihr Ziel zu erreichen.

 Bitmap bmp=BitmapFactory.decodeResource(getResources(), R.drawable.profileimage);
    if (bmp!=null) {
        Bitmap bitmap_round=getRoundedShape(bmp);
        if (bitmap_round!=null) {
            profileimage.setImageBitmap(bitmap_round);
        }
    }

  public Bitmap getRoundedShape(Bitmap scaleBitmapImage) {
    int targetWidth = 100;
    int targetHeight = 100;
    Bitmap targetBitmap = Bitmap.createBitmap(targetWidth, 
            targetHeight,Bitmap.Config.ARGB_8888);

    Canvas canvas = new Canvas(targetBitmap);
    Path path = new Path();
    path.addCircle(((float) targetWidth - 1) / 2,
            ((float) targetHeight - 1) / 2,
            (Math.min(((float) targetWidth), 
                    ((float) targetHeight)) / 2),
                    Path.Direction.CCW);

    canvas.clipPath(path);
    Bitmap sourceBitmap = scaleBitmapImage;
    canvas.drawBitmap(sourceBitmap, 
            new Rect(0, 0, sourceBitmap.getWidth(),
                    sourceBitmap.getHeight()), 
                    new Rect(0, 0, targetWidth, targetHeight), new Paint(Paint.FILTER_BITMAP_FLAG));
    return targetBitmap;
}

2voto

Himanshu Rawat Punkte 608

ImageWorker Library kann Bitmap in Drawable oder Base64 und umgekehrt konvertieren.

val bitmap: Bitmap? = ImageWorker.convert().drawableToBitmap(sourceDrawable)

Umsetzung

Auf Projektebene Gradle

allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }

In der Anwendungsebene Gradle

dependencies {
            implementation 'com.github.1AboveAll:ImageWorker:0.51'
    }

Sie können auch Bitmaps/Drawables/Base64-Bilder von extern speichern und abrufen.

Sehen Sie hier nach. https://github.com/1AboveAll/ImageWorker/edit/master/README.md

2voto

Sachidananda Sahu Punkte 109

Wenn Sie Kotlin verwenden, verwenden Sie den folgenden Code. Es wird funktionieren

// zur Verwendung des Bildpfads

val image = Drawable.createFromPath(path)
val bitmap = (image as BitmapDrawable).bitmap

1voto

Angel Punkte 133
 // get image path from gallery
protected void onActivityResult(int requestCode, int resultcode, Intent intent) {
    super.onActivityResult(requestCode, resultcode, intent);

    if (requestCode == 1) {
        if (intent != null && resultcode == RESULT_OK) {             
            Uri selectedImage = intent.getData();

            String[] filePathColumn = {MediaStore.Images.Media.DATA};
            Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
            cursor.moveToFirst();
            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            filePath = cursor.getString(columnIndex);

            //display image using BitmapFactory

            cursor.close(); bmp = BitmapFactory.decodeFile(filepath); 
            iv.setBackgroundResource(0);
            iv.setImageBitmap(bmp);
        }
    }
}

0 Stimmen

Ich glaube, Sie haben die Frage falsch verstanden. Die Frage lautet: Wie erhält man eine Bitmap von einer zeichenbaren Ressource, nicht von der Systemgalerie?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X