7
votes

Comment voir réellement un bitmap tiré d'un décharge de tas Android

Dans le processus de suivi de graves problèmes de mémoire dans mon application, j'ai examiné plusieurs décharges de tas de mon application et la plupart du temps, j'ai un énorme bitmap que je ne connais pas.

Il faut 9,4 Mo , ou 9 830 400 octets, ou en fait une image de 1280x1920 à 4 octets par pixels.

I enregistré dans Eclipse Tape, c'est bien un octet [9830400], qui a une référence entrante qui est un Android .graphics.bitmap .

J'aimerais jeter ceci dans un fichier et essayer de le voir. Je ne comprends pas d'où vient-il de. Ma plus grande image de tous mes érables est un png de 640x960, qui prend moins de 3 Mo.

J'ai essayé d'utiliser Eclipse pour "Copier la valeur to File", mais je pense qu'il imprime simplement le tampon dans le fichier, et je ne connais aucun logiciel d'image pouvant lire un flux d'octets et l'afficher comme 4 octets par image pixel.

aucune idée?

Voici ce que j'ai essayé: Dump La matrice d'octet à un fichier, le pousser à / sdcard / img et chargez une activité comme celle-ci: xxx

Je n'ai rien vu.

Savez-vous comment est codé l'image? Disons qu'il est stocké dans byte [] tampon . tampon [0] est rouge, tampon [1] est vert, etc.


4 commentaires

N'est-ce pas que le cache de rendu indigène? Exécutez-vous avec une accélération matérielle activée?


Oui, j'ai hw accélération. Mais cela n'explique pas pourquoi mon bitmap a été hauté de 200% et pourquoi cette énorme bitmap est allouée dans le tas, dans l'IMHO.


Avez-vous eu de la chance de savoir quelle image c'était? Moi aussi j'ai une image mal voyous qui prend 1,1 Mo et semble provenir des ressources préchargées Android. Lorsque je regarde l'aperçu du tampon octet à l'aide de GIMP, je vois une image gradient radiale bleu de taille 1044x270.


Oui, c'était l'une des images de mes érables. Vérifiez la réponse acceptée à cette question, il existe un programme C qui convertit le blob d'octet trouvé de Mat vers un fichier bitmap.


5 Réponses :


0
votes

Il suffit de prendre l'entrée sur l'image et de le convertir en un objet bitmap à l'aide du flux de fichiers / DaTrastream. Ajoutez également des journaux pour voir des données pour chaque image utilisée.


0 commentaires

2
votes

OK - Après quelques essais infructueux, j'ai enfin reçu quelque chose de ce tableau d'octet. J'ai écrit ce programme C simple pour convertir le tableau d'octets en un fichier bitmap Windows. Je dépose le code au cas où quelqu'un est intéressé.
J'ai compilé cela contre VisualC 6.0 et GCC 3.4.4, il devrait fonctionner sur n'importe quel système d'exploitation (testé sur Windows, Linux et MacOS X). XXX

Ainsi, en utilisant cet outil, j'ai pu reconnaître le Image utilisée pour générer ce bitmap 1280x1920.


2 commentaires

Je me demandais si vous avez enregistré le contenu de la matrice d'octets de manière particulière sur Mac OSX? J'ai pu compiler votre code et l'exécuter contre le contenu du fichier que j'ai enregistré hors de tapis, mais le BMP résultant ne peut pas être lu par la visionneuse d'affichage de l'aperçu de l'aperçu Mac (en supposant que quelque chose ne va pas avec le fichier d'origine étant donné que le code n'affiche pas le code. )


Je ne me souviens pas exactement, je viens d'utiliser "la valeur de copie to dossier" d'Eclipse à partir du tapis, et a dirigé mon programme C sur ce fichier.



0
votes

Vous pouvez activer une connexion USB et copier le fichier à un autre ordinateur avec plus d'outils à rechercher.

Certains périphériques pourraient être configurés pour vider l'écran actuel sur le système de fichiers lorsque le bouton Démarrer est enfoncé. Peut-être que cela vous arrive.


1 commentaires

Merci beaucoup, mais je ne vois pas comment cela est pertinent pour mon problème et comment cela aurait pu m'a aidée à convertir le réseau d'octets pris à partir d'un dépotoir de tas en un format d'image visible.



3
votes

voir ici pour une réponse plus facile: Mat (analyseur de mémoire Eclipse) - Comment afficher des bitmaps de la mémoire de mémoire

TL; DR - Installez GIMP et chargez l'image comme RGB Right Alpha


0 commentaires

2
votes

J'ai trouvé cela à partir de la dernière version de Android Studio (2.2.2 à compter de l'écriture), vous pouvez afficher directement le fichier bitmap:

  1. Ouvrez l'onglet 'Moniteur Android' (en bas à gauche), puis sur l'onglet Mémoire.
  2. Appuyez sur le bouton "Dump Java Heap"

  3. Choisissez le nom de la classe "bitmap" pour l'instantané actuel, sélectionnez chaque instance de bitmap et affichez quelle image consommez exactement plus de mémoire que prévu. (écrans 4 et 5)

  4. Choisissez le nom bitmap Nom de la classe ...

     Entrez la description de l'image ici

    1. Sélectionnez chaque instance de bitmap

       Entrez la description de l'image ici

      et cliquez avec le bouton droit de la souris sur celui-ci, sélectionnez Afficher bitmap

       Entrez la description de l'image ici


0 commentaires