"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-11-25
Parcourir:354

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 première 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 valeur.

Solution :

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

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

Dans ce 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 de ByteArrayOutputStream en un tableau d'octets.

En utilisant cette approche, vous pouvez convertir efficacement un objet Bitmap en un tableau d'octets sans rencontrant le problème de sous-débordement de la mémoire tampon.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3