Maison  >  Article  >  Java  >  Pourquoi tous les octets de mon tampon sont-ils 0 après avoir appelé copyPixelsToBuffer() sur un Bitmap ?

Pourquoi tous les octets de mon tampon sont-ils 0 après avoir appelé copyPixelsToBuffer() sur un Bitmap ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-05 10:18:02356parcourir

Why are all bytes in my buffer 0 after calling copyPixelsToBuffer() on a Bitmap?

Java : Conversion d'un bitmap en tableau d'octets

Lors de la tentative de conversion d'un objet Bitmap en tableau d'octets à l'aide du code fourni, les utilisateurs peuvent rencontrer un problème où tous les octets du tampon restent à 0 après avoir appelé copyPixelsToBuffer(). Malgré l'immuabilité du Bitmap renvoyé par la caméra, cela ne devrait pas affecter le processus de copie.

Cause profonde potentielle :

L'extrait de code utilise la classe ByteBuffer pour allouer de la mémoire et copier le Bitmap. pixels dans le tampon. Cependant, il accède directement à un tampon sous-jacent sans définir correctement son décalage. Cela peut avoir pour conséquence que la méthode get() ne renvoie que 0 valeurs.

Solution :

Pour résoudre ce problème, envisagez d'utiliser l'approche suivante :

<code class="java">Bitmap bmp = intent.getExtras().get("data");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
bmp.recycle();</code>

Dans ce cas code amélioré :

  • Un flux ByteArrayOutputStream est créé, qui peut être utilisé pour capturer des données à convertir en un tableau d'octets.
  • La méthode compress() est invoquée sur l'objet Bitmap pour convertir ses pixels au format PNG et les écrire dans le ByteArrayOutputStream.
  • Enfin, la méthode toByteArray() convertit le contenu du ByteArrayOutputStream en un tableau d'octets.

En utilisant cette approche, vous pouvez convertir efficacement un objet Bitmap en un tableau d'octets sans rencontrer le problème de débordement de tampon.

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!

Déclaration:
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