Je travaille sur une fonction pour télécharger une image à partir d'un serveur Web, l'afficher à l'écran et si l'utilisateur souhaite conserver l'image, enregistrez-la sur la carte SD dans un certain dossier. Existe-t-il un moyen facile de prendre un bitmap et de simplement l'enregistrer sur la carte SD dans un dossier de mon choix?
Mon problème est que je peux télécharger l'image, l'afficher à l'écran sous forme de bitmap. La seule façon que j'ai pu trouver pour enregistrer une image dans un dossier particulier est d'utiliser FileOutputStream, mais cela nécessite un tableau d'octets. Je ne sais pas comment convertir (si c'est la bonne façon) de Bitmap en tableau d'octets, donc je peux utiliser un FileOutputStream pour écrire les données.
L'autre option que j'ai est d'utiliser MediaStore:
MediaStore.Images.Media.insertImage(getContentResolver(), bm,
barcodeNumber + ".jpg Card Image", barcodeNumber + ".jpg Card Image");
Ce qui fonctionne bien pour enregistrer sur la carte SD, mais ne vous permet pas de personnaliser le dossier.
mImage.setImageBitmap(_result.getBitmap());
dans mononTaskComplete()
rappel. Je dois maintenant autoriser les utilisateurs à enregistrer le fichier localement s'ils le souhaitent via le menu contextuel de la presse longue. Je devrais pouvoir utiliser la solution ci-dessous. Ce que je veux savoir cependant, avez-vous découvert une meilleure approche à ce sujet?Réponses:
la source
90
, dans l'exemple ci-dessus n'aura aucun effet lors de l'enregistrement au format PNG, mais fera une différence pour les JPEG. Dans le cas d'un JPEG, vous pouvez choisir n'importe quel nombre entre 0 et 100.Vous devez utiliser la
Bitmap.compress()
méthode pour enregistrer un bitmap en tant que fichier. Il compressera (si le format utilisé le permet) votre image et la poussera dans un OutputStream.Voici un exemple d'une instance Bitmap obtenue via
getImageBitmap(myurl)
qui peut être compressée en JPEG avec un taux de compression de 85%:la source
fOut.flush()
n'est-il pas possible de l'omettre?Bitmap.compress
spécifie la qualité.getImageBitmap(myurl)
lèvera une exception sans autorisation dans AndroidManifest.xml (au moins dans os2.2):
la source
À l'intérieur
onActivityResult
:la source
Certains formats, comme le PNG sans perte, ignoreront le paramètre de qualité.
la source
Voici l'exemple de code pour enregistrer le bitmap dans un fichier:
Appelez maintenant cette fonction pour enregistrer le bitmap dans la mémoire interne.
File newfile = savebitmap(bitmap)
;J'espère que cela vous aidera. Bonne vie de codage.
la source
la source
Pourquoi ne pas appeler la
Bitmap.compress
méthode avec 100 (ce qui semble être sans perte)?la source
Je voudrais également enregistrer une photo. Mais mon problème (?) Est que je veux l'enregistrer à partir d'un bitmap que j'ai dessiné.
Je l'ai fait comme ça:
la source
La façon dont j'ai trouvé pour envoyer du PNG et de la transparence.
la source
Créez une vignette vidéo pour une vidéo. Il peut retourner null si la vidéo est corrompue ou si le format n'est pas pris en charge.
Pour enregistrer votre bitmap dans sdcard, utilisez le code suivant
Image du magasin
Pour obtenir le chemin du stockage d'images
la source
Vous souhaitez enregistrer Bitmap dans le répertoire de votre choix. J'ai créé une bibliothèque ImageWorker qui permet à l'utilisateur de charger, enregistrer et convertir des images bitmaps / drawables / base64.
SDK min - 14
Prérequis
Enregistrement Bitmap / Drawable / Base64
Chargement du bitmap
la mise en oeuvre
Ajouter des dépendances
Au niveau du projet Gradle
Au niveau de l'application Gradle
Vous pouvez en savoir plus sur https://github.com/ihimanshurawat/ImageWorker/blob/master/README.md
la source
Hé, donnez simplement le nom à .bmp
Faites ceci:
ça sonnera que IM JUSTE FOOLING AUTOUR, mais essayez-le une fois qu'il sera enregistré dans bmp foramt..Cheers
la source
Assurez-vous que le répertoire est créé avant d'appeler
bitmap.compress
:la source
Après Android 4.4 Kitkat, et à partir de 2017, la part d'Android 4.4 et moins est d'environ 20% et diminue, il n'est pas possible d'enregistrer sur la carte SD en utilisant la
File
classe et lagetExternalStorageDirectory()
méthode. Cette méthode renvoie la mémoire interne de votre appareil et les images enregistrées visibles à chaque application. Vous pouvez également enregistrer des images uniquement privées pour votre application et à supprimer lorsque l'utilisateur supprime votre application avec laopenFileOutput()
méthode.À partir d'Android 6.0, vous pouvez formater votre carte SD en tant que mémoire interne mais uniquement privée sur votre appareil. (Si vous formatez la voiture SD en mémoire interne, seul votre appareil peut accéder ou voir son contenu) Vous pouvez enregistrer sur cette carte SD en utilisant d'autres réponses mais si vous souhaitez utiliser une carte SD amovible, vous devriez lire ma réponse ci-dessous.
Vous devez utiliser Storage Access Framework pour obtenir la
onActivityResult
méthode d'activité uri to folder pour obtenir le dossier sélectionné par l'utilisateur, et ajouter une autorisation persistible de récupération pour pouvoir accéder au dossier après que l'utilisateur a redémarré l'appareil.Maintenant, enregistrez le dossier d'enregistrement dans les préférences partagées pour ne pas demander à l'utilisateur de sélectionner le dossier chaque fois que vous souhaitez enregistrer une image.
Vous devez utiliser la
DocumentFile
classe pour enregistrer votre image, pasFile
ouParcelFileDescriptor
, pour plus d'informations, vous pouvez vérifier ce fil pour enregistrer l'image sur la carte SD avec lacompress(CompressFormat.JPEG, 100, out);
méthode et lesDocumentFile
classes.la source
assurez-vous que vous avez ajouté ci-dessous l'autorisation
et dans AndroidManifest sous
puis appelez simplement saveBitmapFile (passYourBitmapHere)
où
et autres méthodes
et
la source
error handling for PIE devices..
et je suppose que la récursivitégetOutputMediaFile
pourrait être une boucle infinie si la solution de contournement échoue.Enregistrez Bitmap dans votre galerie sans compression.
la source
// | == | Créez un fichier PNG à partir de Bitmap:
// | == | Obtenez Bimap à partir d'un fichier:
la source