Maison > Java > javaDidacticiel > le corps du texte

Pourquoi mon code Java ne parvient-il pas à convertir un bitmap en tableau d'octets ?

Linda Hamilton
Libérer: 2024-11-05 14:53:02
original
401 Les gens l'ont consulté

Why Does My Java Code Fail to Convert a Bitmap to a Byte Array?

Impossible de convertir un bitmap Java en tableau d'octets

L'extrait de code tente de convertir un bitmap Java en tableau d'octets pour un traitement ultérieur. Toutefois, une erreur inattendue se produit lors de la tentative de copie des pixels bitmap dans la mémoire tampon. Les données copiées renvoient systématiquement tous les zéros. Ce problème survient bien que le bitmap soit renvoyé par la caméra comme immuable.

Pour comprendre le problème sous-jacent, considérez ce qui suit :

  bmp.copyPixelsToBuffer(b);

  byte[] bytes = new byte[size];

  try {
     b.get(bytes, 0, bytes.length);
  } catch (BufferUnderflowException e) {
     // always happens
  }
Copier après la connexion

La méthode copyPixelsToBuffer copie les données de pixels du bitmap dans le tampon fourni. Cependant, la taille de la mémoire tampon est incorrecte, ce qui entraîne une exception de dépassement insuffisant de la mémoire tampon. Pour résoudre ce problème, utilisez la taille du tampon renvoyée par b.limit() au lieu de size :

byte[] bytes = new byte[b.limit()];
Copier après la connexion

De plus, la logique conditionnelle pour gérer l'exception de dépassement insuffisant du tampon n'est pas nécessaire. L'exception se produira quelle que soit la condition, car le tampon est toujours sous-dimensionné.

Approche alternative

Au lieu de la méthode problématique copyPixelsToBuffer, envisagez d'utiliser une approche alternative pour convertir le bitmap en un tableau d'octets :

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

Dans cette approche, le bitmap est compressé dans un tableau d'octets au format PNG. Cette méthode garantit une représentation valide du tableau d'octets du bitmap.

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