2009-07-28 12 views
12

J'ai une petite application iPhone sur laquelle je travaille et j'affiche une image avec un UIImageView. Je l'intensifie en utilisant le mode Aspect Fit. Je voudrais que l'image soit agrandie sans interpolation/lissage (je veux qu'elle soit pixélisée). Est-ce que je peux changer ce comportement? Une question un peu plus générale serait: est-ce que je peux implémenter mon propre algorithme de mise à l'échelle, ou y en a-t-il d'autres intégrés que je peux sélectionner?Mise à l'échelle/interpolation UIImageView

Répondre

20

Vous devrez définir la propriété magnificationFilter sur la couche de la vue sur le filtre du plus proche voisin:

[[view layer] setMagnificationFilter:kCAFilterNearest] 
+1

comme le dit la réponse de rekle, assurez-vous d'ajouter #import lors de l'utilisation setMagnificationFilter: –

+1

C'est grand et atteint mon but, mais je veux demander, quand je l'utilise 'magnificationFilter = kCAFilterNearest', est-ce que les pixels grands et nets grossissent réellement les pixels d'origine de l'image, ou juste produits par un traitement? Merci! – Suge

-2

Vous pouvez le faire de deux façons. Vous pouvez soit implémenter un algrorithme de rééchelonnement sans interpolation. Si c'est beaucoup de travail, vous pouvez redimensionner l'image dans une autre application comme gimp ou photoshop. Cela fonctionnerait à moins que vous deviez changer dynamiquement la taille de votre application.

5

Assurez-vous d'inclure la ligne

#import <QuartzCore/CALayer.h> 

En haut du fichier contenant le appel à setMagnificationFilter ou il ne sera pas compilé.

+0

Et ajoutez le framework QuartzCore à votre projet (Groups & Files -> Add -> ExistingFrameworks ... -> QuartzCore.framework -> Ajouter). – suda

0

Swift

imageView.layer.magnificationFilter = kCAFilterNearest 
imageView.layer.shouldRasterize = true