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 :
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é.
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();
Cet extrait de code suit ces étapes :
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);
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!