157 votes

"Bitmap trop volumineux pour être chargé dans une texture"

Je suis charger une bitmap dans une ImageView et cette erreur s’affiche. Je comprends bien que cette limite se rapporte à une limite de taille pour les textures de matériel OpenGL (2048 x 2048). L’image que j’ai besoin de charger est une pincée de zoom d’environ 4 000 pixels de haut.

J’ai essayé de désactiver l’accélération matérielle dans le manifeste, mais pas de joie.

Est-il possible de charger une image supérieure à 2048 pixels dans une ImageView ?

409voto

Pilot_51 Points 2880

Ce n'est pas une réponse directe à la question (le chargement des images >2048), mais une solution possible pour toute victime de l'erreur.

Dans mon cas, l'image est plus petite que 2048 dans les deux dimensions (1280x727 pour être exact), et la question a été spécialement connu sur un Galaxy Nexus. L'image a été dans l' drawable le dossier et aucun de la qualification des dossiers. Android suppose un drawable sans une densité qualificatif sont mdpi et échelles vers le haut ou vers le bas pour les autres densités, dans ce cas, l'échelle 2x pour xhdpi. Déplacer le coupable de l'image à l' drawable-nodpi pour empêcher la mise à l'échelle résolu le problème.

107voto

user1352407 Points 336

J’ai réduit l’image de cette façon :

51voto

jptsetung Points 3204

Tout le rendu est basée sur OpenGL, donc non tu ne peut pas aller au-delà de cette limite. Notez que cela prendrait une énorme quantité de mémoire. Avec ces grandes images, si vous souhaitez effectuer un zoom avant et dans un environement mobile avec des contraintes de mémoire lourd, vous devriez installer un système similaire à ce que vous voyez dans google maps par exemple. Avec l’image divisée en plusieurs morceaux et plusieurs définitions.

6voto

Larcho Points 26

BitmapRegionDecoder fait le tour.

Vous pouvez substituer onDraw(Canvas canvas), commencer un nouveau Thread et décoder le sont visible pour l’utilisateur.

5voto

diegocarloslima Points 538

Comme indiqué par Larcho, à partir de l'API de niveau 10, vous pouvez utiliser BitmapRegionDecoder à la charge des régions spécifiques à partir d'une image et avec cela, vous pouvez accomplir pour afficher une grande image en haute résolution par l'allocation en mémoire juste le nécessaire régions. J'ai récemment développé une lib qui offre la visualisation d'images en grand avec touch geste de la manipulation. Le code source et des échantillons sont disponibles à https://github.com/diegocarloslima/ByakuGallery

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X