2010-10-10 26 views
7

Je veux agrandir un UIImage de telle manière que l'utilisateur puisse voir les pixels dans le UIImage très net. Quand je mets ça à un UIImageView et que l'on redimensionne la matrice de transformation, l'UIImage apparaît anti-aliasé et lissé.Comment agrandir une UIImage sans lisser quoi que ce soit?

Existe-t-il un moyen de rendre dans un contexte bitmap plus grand en répétant simplement chaque ligne et chaque colonne pour obtenir des pixels plus grands? Comment pourrais-je faire ça?

+0

Quelle est votre facteur d'échelle? Gardez à l'esprit que seulement pour x2, x3, x4 etc., vous pouvez vous attendre à obtenir des résultats "nets". – Eiko

+1

Notez que cette méthode est connue sous le nom d'interpolation du plus proche voisin. – BoltClock

Répondre

20

#import <QuartzCore/CALayer.h>

view.layer.magnificationFilter = kCAFilterNearest

+3

Notez que cela ne fonctionne pas si vous avez créé UIImage pour UIImageView avec [UIImage imageWithCIImage: ci]; – marcelnijman

+2

en outre, utilisez 'view.layer.shouldRasterize = YES'. C'est pour éviter le problème où certaines images montrent 4 pixels pour chaque pixel. –

+0

@PeterDeWeese, C'est génial et atteint mon but, mais je veux demander, quand j'utilise 'magnificationFilter = kCAFilterNearest', les gros pixels sont-ils grossis vraiment les pixels originaux de l'image, ou juste produits par un traitement? Merci ! – Suge

1

J'ai aussi essayé ceci (sur une sous-couche) et je ne pouvais pas le faire fonctionner, il était encore floue. Voilà ce que je devais faire:

const CGFloat PIXEL_SCALE = 2; 
layer.magnificationFilter = kCAFilterNearest; //Nearest neighbor texture filtering 
layer.transform = CATransform3DMakeScale(PIXEL_SCALE, PIXEL_SCALE, 1); //Scale layer up 
//Rasterize w/ sufficient resolution to show sharp pixels 
layer.shouldRasterize = YES; 
layer.rasterizationScale = PIXEL_SCALE; 
+0

Merci pour les downvotes drive-by ... esprit expliquant quel est le problème avec cette réponse? – Eliot

-1

Pour UIImage créé à partir CIImage vous pouvez utiliser:

imageView.image = UIImage(CIImage: ciImage.imageByApplyingTransform(CGAffineTransformMakeScale(kScale, kScale)))