32 Stimmen

Wie kann ich eine Drawable-Ressource in eine Datei schreiben?

Ich muss etwas exportieren Drawable Ressourcen in einer Datei.

Ich habe zum Beispiel eine Funktion, die mir ein Drawable Objekt. Ich möchte es in eine Datei schreiben in /sdcard/drawable/newfile.png . Wie kann ich das tun?

45voto

Mauker Punkte 11031

Obwohl die beste Antwort hier einen schönen Ansatz hat. Es ist nur ein Link. Hier ist, wie Sie die Schritte tun können:

Drawable in Bitmap umwandeln

Dafür gibt es mindestens zwei Möglichkeiten, je nachdem, woher Sie die Daten beziehen Drawable von.

  1. Drawable ist eingeschaltet res/drawable Mappen.

Angenommen, Sie möchten eine Drawable die sich in Ihren Auslosungsordnern befindet. Sie können die BitmapFactory#decodeResource Ansatz. Beispiel unten.

Bitmap bm = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.your_drawable);
  1. Sie haben eine PictureDrawable Objekt.

Wenn Sie eine PictureDrawable von einem anderen Ort "zur Laufzeit", können Sie die Bitmap#createBitmap Ansatz zur Erstellung Ihrer Bitmap . Wie im folgenden Beispiel.

public Bitmap drawableToBitmap(PictureDrawable pd) {
    Bitmap bm = Bitmap.createBitmap(pd.getIntrinsicWidth(), pd.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bm);
    canvas.drawPicture(pd.getPicture());
    return bm;
}

Speichern der Bitmap auf der Festplatte

Sobald Sie Ihre Bitmap Objekts, können Sie es im permanenten Speicher ablegen. Sie müssen nur das Dateiformat wählen (JPEG, PNG oder WEBP).

/**
 * @param dir you can get from many places like Environment.getExternalStorageDirectory() or mContext.getFilesDir() depending on where you want to save the image.
 * @param fileName The file name.
 * @param bm The Bitmap you want to save.
 * @param format Bitmap.CompressFormat can be PNG,JPEG or WEBP.
 * @param quality quality goes from 1 to 100. (Percentage).
 * @return true if the Bitmap was saved successfully, false otherwise.
 */
boolean saveBitmapToFile(File dir, String fileName, Bitmap bm, 
    Bitmap.CompressFormat format, int quality) {

    File imageFile = new File(dir,fileName);

    FileOutputStream fos = null;
    try {
        fos = new FileOutputStream(imageFile);

        bm.compress(format,quality,fos);

        fos.close();

        return true;
    }
    catch (IOException e) {
        Log.e("app",e.getMessage());
        if (fos != null) {
            try {
                fos.close();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
        }
    }
    return false;
}

Und um das Zielverzeichnis zu erhalten, versuchen Sie etwas wie:

File dir = new File(Environment.getExternalStorageDirectory() + File.separator + "drawable");

boolean doSave = true;
if (!dir.exists()) {
    doSave = dir.mkdirs();
}

if (doSave) {
    saveBitmapToFile(dir,"theNameYouWant.png",bm,Bitmap.CompressFormat.PNG,100);
}
else {
    Log.e("app","Couldn't create target directory.");
}

Obs: Denken Sie daran, diese Art von Arbeit in einem Hintergrund-Thread auszuführen, wenn Sie mit großen Bildern oder vielen Bildern arbeiten, da dies einige Zeit in Anspruch nehmen kann und Ihre Benutzeroberfläche blockieren könnte, so dass Ihre Anwendung nicht mehr reagiert.

-12voto

Nitesh Khosla Punkte 879

Das auf der sdcard gespeicherte Bild abrufen..

File imgFile = new  File(“/sdcard/Images/test_image.jpg”);
if(imgFile.exists()){

    Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());

    ImageView myImage = (ImageView) findViewById(R.id.imageviewTest);
    myImage.setImageBitmap(myBitmap);

}

Aktualisierung:

String path = Environment.getExternalStorageDirectory()+ "/Images/test.jpg"; 
File imgFile = new File(path);

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