Maison > Java > javaDidacticiel > le corps du texte

Pourquoi mon tableau d'octets contient-il des zéros après la conversion d'un bitmap à l'aide de copyPixelsToBuffer ?

Patricia Arquette
Libérer: 2024-11-06 15:45:02
original
280 Les gens l'ont consulté

Why Does My Byte Array Contain Zeros After Converting a Bitmap Using copyPixelsToBuffer?

Préservation des données bitmap avec les conversions de tableaux d'octets

La manipulation de bitmaps est une tâche courante dans le développement Android, impliquant souvent la conversion de bitmaps en tableaux d'octets pour le stockage ou la transmission de données. Cependant, certains développeurs rencontrent des difficultés lorsqu'ils tentent d'effectuer cette conversion, ce qui conduit à la question suivante :

Q : Pourquoi le tableau d'octets copié est-il rempli de zéros après la conversion d'un bitmap à l'aide de copyPixelsToBuffer ?

L'extrait de code fourni démontre une tentative de conversion d'un bitmap en tableau d'octets à l'aide de copyPixelsToBuffer, mais le tampon résultant ne contient que des zéros. Pour comprendre la cause de ce problème, analysons le code :

  • Le bitmap est obtenu à partir d'une intention.
  • Sa taille est calculée à l'aide de la hauteur et des octets de ligne du bitmap.
  • Un ByteBuffer est alloué avec la taille calculée.
  • copyPixelsToBuffer est invoqué pour copier les pixels bitmap dans le tampon.
  • Un tableau d'octets de la même taille est créé.
  • Le tampon est récupéré dans le tableau d'octets.

Après un examen plus approfondi, il devient évident que le problème réside dans la méthode copyPixelsToBuffer elle-même. Lors de l'utilisation d'un bitmap immuable, il n'effectue pas de copie réelle des pixels mais renvoie une référence en double. Ainsi, toute modification ultérieure du bitmap ne sera pas reflétée dans le tampon copié.

Solution : méthode alternative pour la conversion du bitmap

Pour convertir efficacement un bitmap en un tableau d'octets, une méthode alternative doit être employé. Une approche fiable consiste à compresser le bitmap à l'aide d'un format tel que PNG ou JPEG et à stocker les données compressées dans un tableau d'octets. Voici un exemple :

Bitmap bmp = intent.getExtras().get("data");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
bmp.recycle();
Copier après la connexion

Cet extrait de code suit ces étapes :

  • Compresse le bitmap au format PNG ou JPEG à l'aide de ByteArrayOutputStream.
  • Obtient le données compressées sous forme de tableau d'octets.
  • Libère le bitmap d'origine une fois la conversion terminée.

N'oubliez pas que les données bitmap peuvent également être récupérées à partir d'un tableau d'octets à l'aide de la classe BitmapFactory :

BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal