Ich arbeite an einer Funktion zum Herunterladen eines Bildes von einem Webserver, zum Anzeigen auf dem Bildschirm. Wenn der Benutzer das Bild behalten möchte, speichern Sie es auf der SD-Karte in einem bestimmten Ordner. Gibt es eine einfache Möglichkeit, eine Bitmap zu erstellen und sie einfach auf der SD-Karte in einem Ordner meiner Wahl zu speichern?
Mein Problem ist, dass ich das Bild herunterladen und als Bitmap auf dem Bildschirm anzeigen kann. Die einzige Möglichkeit, ein Bild in einem bestimmten Ordner zu speichern, ist die Verwendung von FileOutputStream. Dafür ist jedoch ein Byte-Array erforderlich. Ich bin nicht sicher, wie ich von Bitmap in ein Byte-Array konvertieren soll (wenn dies überhaupt der richtige Weg ist), daher kann ich die Daten mit einem FileOutputStream schreiben.
Die andere Option, die ich habe, ist die Verwendung von MediaStore:
MediaStore.Images.Media.insertImage(getContentResolver(), bm,
barcodeNumber + ".jpg Card Image", barcodeNumber + ".jpg Card Image");
Das funktioniert gut, um auf einer SD-Karte zu speichern, aber Sie können den Ordner nicht anpassen.
mImage.setImageBitmap(_result.getBitmap());
in meinemonTaskComplete()
Rückruf. Ich muss jetzt Benutzern erlauben, die Datei lokal zu speichern, wenn sie über ein Kontextmenü mit langem Drücken möchten. Ich sollte in der Lage sein, die folgende Lösung zu verwenden. Was ich aber wissen möchte, haben Sie einen besseren Ansatz dafür gefunden?Antworten:
quelle
90
im obigen Beispiel beim Speichern als PNG keine Auswirkungen hat, aber für JPEGs einen Unterschied macht. Im Falle eines JPEG können Sie eine beliebige Zahl zwischen 0 und 100 wählen.Sie sollten die
Bitmap.compress()
Methode verwenden, um eine Bitmap als Datei zu speichern. Es wird Ihr Bild komprimieren (sofern das verwendete Format dies zulässt) und in einen OutputStream verschieben.Hier ist ein Beispiel für eine Bitmap-Instanz
getImageBitmap(myurl)
, die als JPEG mit einer Komprimierungsrate von 85% komprimiert werden kann:quelle
fOut.flush()
ist es nicht möglich, es wegzulassen?Bitmap.compress
gibt die Qualität an.getImageBitmap(myurl)
löst eine Ausnahme ohne Erlaubnis in AndroidManifest.xml aus (zumindest in os2.2):
quelle
Innen
onActivityResult
:quelle
Einige Formate, wie z. B. verlustfreies PNG, ignorieren die Qualitätseinstellung.
quelle
Hier ist der Beispielcode zum Speichern der Bitmap in einer Datei:
Rufen Sie nun diese Funktion auf, um die Bitmap im internen Speicher zu speichern.
File newfile = savebitmap(bitmap)
;;Ich hoffe es hilft dir. Glückliches Codierleben.
quelle
quelle
Warum nicht die
Bitmap.compress
Methode mit 100 aufrufen (was so klingt, als wäre sie verlustfrei)?quelle
Ich möchte auch ein Bild speichern. Aber mein Problem (?) Ist, dass ich es aus einer Bitmap speichern möchte, die ich gezeichnet habe.
Ich habe es so gemacht:
quelle
Die Art und Weise, wie ich PNG und Transparenz gesendet habe.
quelle
Erstellen Sie eine Video-Miniaturansicht für ein Video. Es kann null zurückgeben, wenn das Video beschädigt ist oder das Format nicht unterstützt wird.
Verwenden Sie den folgenden Code, um Ihre Bitmap auf einer SD-Karte zu speichern
Bild speichern
So ermitteln Sie den Pfad für die Bildspeicherung
quelle
Sie möchten Bitmap in einem Verzeichnis Ihrer Wahl speichern. Ich habe eine Bibliothek ImageWorker erstellt, mit der der Benutzer Bitmaps / Drawables / Base64-Bilder laden, speichern und konvertieren kann.
Min SDK - 14
Voraussetzung
Speichern von Bitmap / Drawable / Base64
Bitmap wird geladen
Implementierung
Abhängigkeiten hinzufügen
In Projektebene Gradle
In Application Level Gradle
Weitere Informationen finden Sie unter https://github.com/ihimanshurawat/ImageWorker/blob/master/README.md
quelle
Hey, gib einfach den Namen für .bmp
Mach das:
Es hört sich so an, als würde ich mich nur darum kümmern, aber versuchen Sie es, sobald es in bmp foramt gespeichert wird
quelle
Stellen Sie sicher, dass das Verzeichnis erstellt wurde, bevor Sie Folgendes aufrufen
bitmap.compress
:quelle
Nach Android 4.4 Kitkat und ab 2017 beträgt der Anteil von Android 4.4 und weniger etwa 20% und nimmt ab. Es ist nicht möglich, mit
File
Klasse undgetExternalStorageDirectory()
Methode auf einer SD-Karte zu speichern . Diese Methode gibt den internen Speicher Ihres Geräts zurück und speichert Bilder, die für jede App sichtbar sind. Sie können Bilder auch nur privat in Ihrer App speichern und löschen, wenn der Benutzer Ihre App mit deropenFileOutput()
Methode löscht .Ab Android 6.0 können Sie Ihre SD-Karte als internen Speicher formatieren, jedoch nur privat für Ihr Gerät. (Wenn Sie das SD-Auto als internen Speicher formatieren, kann nur Ihr Gerät auf dessen Inhalt zugreifen oder diesen anzeigen.) Sie können mit auf dieser SD-Karte speichern andere Antworten, aber wenn Sie eine austauschbare SD-Karte verwenden möchten, sollten Sie meine Antwort unten lesen.
Sie sollten Storage Access Framework verwenden , um die
onActivityResult
Aktivitätsmethode uri to folder abzurufen, um den Ordner vom Benutzer auswählen zu lassen, und eine dauerhafte Berechtigung zum Abrufen hinzufügen, um nach dem Neustart des Geräts durch den Benutzer auf den Ordner zugreifen zu können.Speichern Sie nun den Speicherordner in den freigegebenen Einstellungen, damit der Benutzer nicht jedes Mal, wenn Sie ein Bild speichern möchten, aufgefordert wird, einen Ordner auszuwählen.
Sie sollten
DocumentFile
class verwenden, um Ihr Bild zu speichern, nicht,File
oderParcelFileDescriptor
für weitere Informationen können Sie diesen Thread überprüfen, um das Bild mitcompress(CompressFormat.JPEG, 100, out);
Methode undDocumentFile
Klassen auf einer SD-Karte zu speichern .quelle
Stellen Sie sicher, dass Sie unten Berechtigung hinzugefügt haben
und in AndroidManifest unter
Rufen Sie dann einfach saveBitmapFile (passYourBitmapHere) auf.
wo
und andere Methoden
und
quelle
error handling for PIE devices..
und ich denke, die Rekursion ingetOutputMediaFile
könnte eine Endlosschleife sein, wenn die Problemumgehung fehlschlägt.Speichern Sie Bitmap in Ihrer Galerie ohne Komprimierung.
quelle
// | == | Erstellen Sie eine PNG-Datei aus Bitmap:
// | == | Holen Sie sich Bimap aus Datei:
quelle