samedi 17 mars 2012

Grandes images en coupe des carreaux UIScrollView

Si jamais vous avez besoin d'afficher une image obscène sur une grande appareil iOS utilisant un UIScrollView, il ya une session disponible dans les WWDC 2010 vidéos qui va vous montrer exactement comment le faire sans manger jusqu'à l'ensemble de votre mémoire disponible. L'idée de base est que vous avez plusieurs versions de votre image stockée à différentes échelles, et vous coupez chacun d'eux jusqu'à en tuiles et d'utiliser un CATiledLayer pour les afficher. De cette façon, vous n'avez pas à maintenir l'ensemble de l'image obscène grandes dans la mémoire de tous à la fois et les performances de défilement de votre application reste accrocheur.

Bien sûr, vous devez obtenir les images découpé en tuiles afin d'utiliser cette technique.

Il ya une grande ligne de commande outil open source appelé ImageMagick qui, entre autres choses, hacher une image jusqu'à en tuiles qui peuvent être utilisés à cette fin. Malheureusement, je n'ai pas trouvé très utile pour ImageMagick vraiment, vraiment des images de grande taille (plus environ 100 megs). Le programme serait tout simplement s'asseoir et de désabonnement et de remplir mon disque dur avec concerts d'espace de swap sans générer de tuiles. Il a bien fonctionné pour les petites images, mais j'avais besoin de quelque chose qui pourrait travailler sur les grands.

Donc, je suis à la recherche d'un outil alternatif, sans beaucoup de chance. Il ya une poignée d'outils commerciaux qui le fera, mais celles que j'ai trouvées étaient pour Windows. Je sais que Photoshop a la capacité de le faire avec des tranches, mais je ne voulais pas aller dans cette voie pour un couple de raisons, pas le moindre de ce qui est que je n'ai pas une version actuelle de Photoshop et ne voulons donner à Adobe d'argent.

Après quelques recherches sur Google infructueuses, j'ai décidé de prendre avantage du fait que je suis un programmeur, et j'ai roulé ma propre application pour ce faire. Il était agréable d'être de retour dans les API Cocoa, mais je dois admettre qu'ils se sentent krufty peu par rapport à l'API iOS. Quoi qu'il en soit, je l'appelle le "Tile Cutter» du programme. Ce n'est pas le nom le plus original, j'en conviens, mais il a été développé en tant que produit une maison et n'a pas besoin d'un titre plein d'esprit.

Tile Cutter est plutôt os à nu et a été développé dans environ une demi-journée, mais il semble bien fonctionner. J'ai été capable de découper une image 1,3 gig (oui, vraiment) en 400x400 morceaux en 15 minutes environ sur mon portable. J'imagine que je ne suis pas la seule personne qui a besoin de découper les images à utiliser dans UIScrollView, j'ai donc décidé de libérer Tile Cutter comme un utilitaire gratuit (bien sûr, sans aucune garantie ou autres joyeusetés). Je vais aussi publier le code source sur les GitHub une fois que j'ai eu la chance de nettoyer le code un peu.

Voici un screenshot de l'interface principale:
Screen shot 2010-10-08 at 3.25.23 PM.png

Et les barres de progression qui affiche dans une feuille quand Cutter Tile barattage loin. Vous aurez en fait seulement voir les barres de progression sur les très grandes images, cependant, car il fonctionne assez rapidement sur les images plus de taille raisonnable.
Screen shot 2010-10-08 at 3.29.46 PM.png


Télécharger Tile Cutter 1.0. Commentaires, comme toujours, est la bienvenue.

Aucun commentaire: