527 Stimmen

Bitmap an einem Ort speichern

Ich arbeite an einer Funktion, die ein Bild von einem Webserver herunterlädt, es auf dem Bildschirm anzeigt und, wenn der Benutzer das Bild behalten möchte, es auf der SD-Karte in einem bestimmten Ordner speichert. Gibt es eine einfache Möglichkeit, ein Bitmap zu nehmen und es einfach auf der SD-Karte in einem Ordner meiner Wahl zu speichern?

Mein Problem ist, dass ich das Bild herunterladen kann, zeigen Sie es auf dem Bildschirm als Bitmap. Die einzige Möglichkeit, die ich gefunden habe, um ein Bild in einem bestimmten Ordner zu speichern, ist die Verwendung von FileOutputStream, aber das erfordert ein Byte-Array. Ich bin nicht sicher, wie zu konvertieren (wenn dies sogar der richtige Weg ist) von Bitmap zu Byte-Array, so dass ich eine FileOutputStream verwenden können, um die Daten zu schreiben.

Die andere Möglichkeit, die ich habe, ist die Verwendung von MediaStore :

MediaStore.Images.Media.insertImage(getContentResolver(), bm,
    barcodeNumber + ".jpg Card Image", barcodeNumber + ".jpg Card Image");

Das Speichern auf der SD-Karte funktioniert gut, aber Sie können den Ordner nicht anpassen.

993voto

Ulrich Scheller Punkte 12630
try (FileOutputStream out = new FileOutputStream(filename)) {
    bmp.compress(Bitmap.CompressFormat.PNG, 100, out); // bmp is your Bitmap instance
    // PNG is a lossless format, the compression factor (100) is ignored
} catch (IOException e) {
    e.printStackTrace();
}

148voto

JoaquinG Punkte 2030

Sie sollten die Bitmap.compress() Methode, um ein Bitmap als Datei zu speichern. Sie komprimiert (wenn das verwendete Format es zulässt) Ihr Bild und schiebt es in einen OutputStream.

Hier ist ein Beispiel für eine Bitmap-Instanz, die durch getImageBitmap(myurl) das als JPEG mit einer Komprimierungsrate von 85% komprimiert werden kann:

// Assume block needs to be inside a Try/Catch block.
String path = Environment.getExternalStorageDirectory().toString();
OutputStream fOut = null;
Integer counter = 0;
File file = new File(path, "FitnessGirl"+counter+".jpg"); // the File to save , append increasing numeric counter to prevent files from getting overwritten.
fOut = new FileOutputStream(file);

Bitmap pictureBitmap = getImageBitmap(myurl); // obtaining the Bitmap
pictureBitmap.compress(Bitmap.CompressFormat.JPEG, 85, fOut); // saving the Bitmap to a file compressed as a JPEG with 85% compression rate
fOut.flush(); // Not really required
fOut.close(); // do not forget to close the stream

MediaStore.Images.Media.insertImage(getContentResolver(),file.getAbsolutePath(),file.getName(),file.getName());

39voto

user996042 Punkte 549
outStream = new FileOutputStream(file);

wird ohne Erlaubnis in AndroidManifest.xml eine Ausnahme auslösen (zumindest in os2.2):

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

31voto

Alessandro Punkte 281

Innerhalb onActivityResult :

String filename = "pippo.png";
File sd = Environment.getExternalStorageDirectory();
File dest = new File(sd, filename);

Bitmap bitmap = (Bitmap)data.getExtras().get("data");
try {
     FileOutputStream out = new FileOutputStream(dest);
     bitmap.compress(Bitmap.CompressFormat.PNG, 90, out);
     out.flush();
     out.close();
} catch (Exception e) {
     e.printStackTrace();
}

14voto

A-Droid Tech Punkte 2221

Hier ist der Beispielcode zum Speichern von Bitmaps in einer Datei:

public static File savebitmap(Bitmap bmp) throws IOException {
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    bmp.compress(Bitmap.CompressFormat.JPEG, 60, bytes);
    File f = new File(Environment.getExternalStorageDirectory()
            + File.separator + "testimage.jpg");
    f.createNewFile();
    FileOutputStream fo = new FileOutputStream(f);
    fo.write(bytes.toByteArray());
    fo.close();
    return f;
}

Rufen Sie nun diese Funktion auf, um die Bitmap im internen Speicher zu speichern.

File newfile = savebitmap(bitmap) ;

Ich hoffe, es wird Ihnen helfen. Viel Spaß beim Coden.

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