2012-07-08 14 views
8

Necesito un método para cambiar el tamaño de UIImage como en photoshop con el remuestreo del "vecino más cercano". Estaba buscando algo, pero todo lo que encontré fue sobre los grosores de CoreGraphics para mejorar la calidad del remuestreo bicúbico. Tengo un diseño estilo píxel en mi aplicación, y muchas cosas que creo por píxel y luego lo agrandé con un multiplicador x5 (y lleva mucho tiempo, así que incluso me acerco a escribir un guión para Photoshop). Por ejemplo:UIImageize con bordes duros

enter image description here>enter image description here

Pero realmente no necesita este resultado como el de remuestreo:

enter image description here

Tal vez nadie me va a mostrar de la manera correcta.

+0

Además, puedo decir que he encontrado una buena manera de procesar imágenes por lotes con "acciones" de photoshop. Pero todavía necesito una respuesta para disminuir el tamaño de las imágenes de recursos almacenados. – kokoko

Respuesta

16

Cuando se dibuja la imagen en un contexto gráfico, se puede ajustar la calidad de la interpolación del contexto gráfico a "ninguno", como esto (por ejemplo, en el método drawRect de una vista):

CGContextRef c = UIGraphicsGetCurrentContext(); 
CGContextSetInterpolationQuality(c, kCGInterpolationNone); 
UIImage *image = [UIImage imageNamed:@"pixels.png"]; 
[image drawInRect:self.bounds]; 

Si necesita el resultado como UIImage (por ejemplo, para asignarlo a un control de UI incorporado), puede hacer esto con UIGraphicsBeginImageContext (encontrará muchos ejemplos para eso).

Una alternativa sería la de establecer la propiedad magnificationFilter de la capa de un vista de la imagen:

pixelatedImageView.layer.magnificationFilter = kCAFilterNearest; 

Esto es probablemente más rápido y más memoria eficiente, debido a que no es necesario volver a dibujar la imagen.

+0

Esta respuesta se ve bien, necesito comprobarlo en XCode para aceptar pronto. Gracias. – kokoko

Cuestiones relacionadas