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. Y a-t-il un moyen de charger / dessiner juste la partie que je veux donner un insélistance == 1 code>) p>
rect code> spécifiant la zone sans charger l'ensemble du contenu bitmap? p>
4 Réponses :
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. P>
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. P>
Je suis assez confiant que cela est possible car vous pouvez charger un très grand fichier bitmap dans un J'utilise un fichier de ressources, mais puisque vous pouvez utiliser Ensuite, utilisez la méthode 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 imageview code> 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:
drail code> à la place: strong> p>
drawable.createfromstream code> pour charger l'image de n'importe quel
INPUTStream code> Cela devrait fonctionner avec un bitmap arbitraire. p>
drawable.Draw CODE> pour dessiner sur la toile souhaitée comme: p>
code>. strong> p>
OutofMemorororror code>, y compris lorsque l'orientation de l'écran change. P> p>
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.
Maintenant, il est très pertinent: bitmapReReCoder . P>
Remarque: disponible depuis Android SDK 10 P>
Il peut facilement être fait en utilisant RapidDecoder . Il prend en charge jusqu'à Android 2.2 (niveau d'API 8). P> p>