2010-06-29 9 views
6

J'ai un code de génération d'image qui utilise UIGraphicsBeginImageContext(), UIGraphicsGetImageFromCurrentImageContext() et UIImagePNGRepresentation() pour faire un peu de dessin, puis enregistrez-le sur le disque au format PNG pour une utilisation ultérieure .UIImagePNGRepresentation() et l'échelle (écran de l'iPhone 4)

Est-ce que UIImagePNGRepresentation() prend en compte l'échelle? Comme dans, si j'ai une image qui est de 20 points de large, le PNG résultant sera-t-il de 20 pixels ou de 40 pixels?

De même, lorsque j'affiche ces images, j'utilise [UIImage imageWithContentsOfFile:] et [image drawInRect:]. Existe-t-il un moyen de suggérer à ces méthodes d'utiliser un dessin à plus haute résolution?

Répondre

6

Par la iPhone Application Programming Guide vous devez utiliser UIGraphicsBeginImageContextWithOptions avec une échelle de 2.0 pour créer un contexte correctement mis à l'échelle pour l'iPhone 4.

Quant à la deuxième partie de votre question, je crois que vous devriez enregistrer le résultat .png avec le @ 2x suffixe sur le nom de base (par exemple, [email protected]). Ensuite, lorsque vous le recharger en utilisant UIImage, sa taille et son échelle seront correctement définies. Sinon, votre image sera chargée à l'échelle 1.0 et sera deux fois plus grande (en points) que vous le souhaitez. This section du même document va dans un peu de détail concernant les images haute résolution pour les appareils avec des écrans haute résolution.

+0

Si je crée le contexte avec l'échelle 2.0 (disons que c'est 20 points de large), alors quand j'appelle UIImagePNGRepresentation() le PNG résultant aura-t-il une largeur de 40 pixels? –

+0

Selon ma compréhension des documents, oui. Bien que j'admette que je ne l'ai pas essayé moi-même. Vous créez ainsi un contexte 20x20 pt au facteur d'échelle 2.0. Vous obtenez une image de 40x40 pixels. Vous enregistrez comme [email protected] Ensuite, lorsque vous le chargez avec UIImage, il sera de nouveau 20x20 pt avec une échelle de 2.0. Si à la place vous l'enregistrez juste comme image.png et le chargez, vous obtiendrez une image 40x40 pt avec l'échelle 1.0. –

+0

Merci pour votre aide. Je l'ai eu le travail :) –