9
votes

Existe-t-il un moyen de charger et de dessiner partiellement un fichier bitmap à partir de fichier Android?

Dis que j'ai un peu gros (c'est-à-dire pas dans la mémoire de la plupart des téléphones) Bitmap sur disque. Je veux dessiner uniquement des parties de celui-ci sur l'écran d'une manière qui n'est pas mise à l'échelle (i.e. insélistance == 1 )

Y a-t-il un moyen de charger / dessiner juste la partie que je veux donner un rect spécifiant la zone sans charger l'ensemble du contenu bitmap?


0 commentaires

4 Réponses :


1
votes

En règle générale, ce n'est pas possible, d'autant plus que la plupart des formats d'image sont compressés, vous ne savez même pas quels octets à lire jusqu'à ce que vous ayez extrait la forme non compressée.

Casser votre image dans de petits carreaux et charger uniquement les carreaux dont vous avez besoin pour couvrir la région que vous souhaitez afficher au moment de l'exécution. Pour éviter le défilement de la jirrable, vous voudrez peut-être aussi précharger des carreaux qui ne sont que hors de la vue (ceux qui bordent les carreaux visibles) sur un fil d'arrière-plan.


0 commentaires

9
votes

Je suis assez confiant que cela est possible car vous pouvez charger un très grand fichier bitmap dans un imageview sans problème, il doit donc y avoir une sorte de manière intégrée pour gérer de grands bitmaps .. . Et après quelques tentatives, j'ai trouvé une solution:

au lieu de charger l'ensemble du bitmap et le dessine manuellement vous-même, chargez-le comme un drail à la place: xxx

J'utilise un fichier de ressources, mais puisque vous pouvez utiliser drawable.createfromstream pour charger l'image de n'importe quel INPUTStream Cela devrait fonctionner avec un bitmap arbitraire.

Ensuite, utilisez la méthode drawable.Draw pour dessiner sur la toile souhaitée comme: xxx

comme dans le cas ci-dessus, vous pouvez également faire échelle et traduire le bitmap également en manipulant les limites de l'étreinte et seules les parties pertinentes du bitmap seront chargées et dessinées sur la toile .

Le résultat est une vue zoomable de pincement d'un seul bitmap de 200 ko déposer. J'ai également testé cela avec un fichier PNG de 22 Mo et cela fonctionne toujours sans aucun OutofMemorororror , y compris lorsque l'orientation de l'écran change.


2 commentaires

Dans votre question, vous avez déclaré que l'image ne correspond pas à la mémoire. Cela a-t-il changé?


Non, ça n'a pas. C'est un seul fichier PNG, le tout.



5
votes

Maintenant, il est très pertinent: bitmapReReCoder .

Remarque: disponible depuis Android SDK 10


0 commentaires

3
votes

Il peut facilement être fait en utilisant RapidDecoder . XXX

Il prend en charge jusqu'à Android 2.2 (niveau d'API 8).


0 commentaires