2009-07-28 22 views
12

Tengo una pequeña aplicación de iPhone en la que estoy trabajando y estoy mostrando una imagen con UIImageView. Estoy escalando usando el modo Aspect Fit. Me gustaría que la imagen se ampliara sin interpolación/suavizado (quiero que se vea pixelada). ¿Hay alguna manera de que pueda cambiar este comportamiento?UIImageView escala/interpolación

Una pregunta un poco más general sería ¿puedo implementar mi propio algoritmo de escalado, o hay otros integrados que pueda seleccionar?

Respuesta

20

Usted tendría que establecer la propiedad magnificationFilter en la capa de la vista al filtro vecino más cercano:

[[view layer] setMagnificationFilter:kCAFilterNearest] 
+1

como dice la respuesta de rekle, asegúrese de agregar import cuando se utiliza setMagnificationFilter: –

+1

Eso es grande y alcanza mi propósito, pero quiero preguntar, cuando uso 'magnificationFilter = kCAFilterNearest', son los píxeles grandes y nítidos magnificados realmente los píxeles originales de la imagen, o simplemente producidos por algún procesamiento? ¡Gracias! – Suge

-2

Hay dos formas de hacerlo. Puede implementar un algroritmo de reescalado sin interpolación. Si esto es demasiado trabajo, puede cambiar la escala de la imagen en otra aplicación como gimp o photoshop. Esto funcionaría a menos que necesites cambiar el tamaño dinámicamente en tu aplicación.

5

Asegúrese de incluir la línea

#import <QuartzCore/CALayer.h> 

En la parte superior del archivo que contiene la llama a setMagnificationFilter o no se compilará.

+0

Y agregue el marco QuartzCore a su proyecto (Grupos y archivos -> Agregar -> ExistingFrameworks ... -> QuartzCore.framework -> Agregar). – suda

0

Swift

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