2010-04-28 13 views
2

(cela est lié à la mise en œuvre another question environ sur iPhone)Comment mosaïquer une image 30000 x 6000 pour un écran 480 x 320?

j'ai une grande image, la taille d'environ 30000 (w) x 6000 (H) pixels. Vous pouvez considérer que c'est comme une grande carte. Je suppose que j'ai besoin de le recadrer en plus petits carreaux. Questions:

  • Quelle est la stratégie de tuile?

Exigences:

    image entière
  • (bien recadrée) peuvent être défiler vers le haut/bas/gauche/droite swipes
  • zoom (jusqu'à pixel à pixel) sur (jusqu'à écran en forme par la hauteur) par l'opération 2 doigts
  • efficacité de la mémoire par des tuiles de chargement paresseux

Merci!

Répondre

3

Consultez la partie 3 de l'exemple de code ScrollViewSuite d'Apple pour obtenir un exemple de la procédure à suivre.

+0

Oh, je vois ce que vous avez fait là-bas. Eh bien, j'ai ajouté ma réponse à l'autre question aussi pour aider quelqu'un qui pourrait trébucher à l'avenir, mais je ne pense pas que vous aviez besoin de deux questions pour cela. –

2

Vous pouvez utiliser une technique similaire à MIP mapping pour un zoom efficace. En un mot, vous préparez les images qui sont 1/2, 1/4, 1/8 et ainsi de suite sur les dimensions de votre image originale et chargez/affichez-les en fonction du niveau de zoom requis. Cela permettra d'économiser des calculs de mise à l'échelle au détriment de l'espace de stockage (environ 1/3 d'espace de stockage supplémentaire sera nécessaire). En ce qui concerne le panoramique, l'idée pourrait être d'avoir des dalles préchargées autour de la zone visible. Si un utilisateur effectue un panoramique dans une direction particulière, la vitesse de panoramique pourrait être prise en compte pour précharger plus de mosaïques dans cette direction.

+0

Toute suggestion sur une ligne directrice spécifique pour la coupe des carreaux (par exemple largeur x hauteur - nombre de carreaux sur les carreaux visibles) - basée sur les numéros 30000 6000 480 320? – ohho

+1

Je voudrais juste l'essayer et voir ce qui fonctionne en fonction du temps nécessaire pour charger les images et comment la mémoire est contrainte. –

+1

Je suis totalement d'accord avec Rob, vous pouvez commencer à 480x320 tuiles et peut-être essayer 120x80 pour voir si cela améliore la réactivité. Code pour générer et utiliser des carreaux de taille arbitraire aiderait dans ce cas. –