2012-09-14 8 views
16

Estoy tratando de dibujar una imagen usando el método UIImagedrawInRect:. Aquí está el código:UIImage's drawIntegro: suaviza la imagen

UIImage *image = [UIImage imageNamed:@"OrangeBadge.png"]; 

UIGraphicsBeginImageContext(image.size); 

[image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)]; 

UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 

El problema es que la imagen resultante es borrosa. Aquí está la imagen resultante (en el lado derecho) en comparación con la imagen de origen (en el lado izquierdo):

Source image and blurred image

He intentado tanto CGContextSetAllowsAntialiasing(UIGraphicsGetCurrentContext(), NO)CGContextSetShouldAntialias(UIGraphicsGetCurrentContext(), NO) pero esto no ha solucionado el problema.

¿Alguna idea?

Gracias de antemano.

Respuesta

29

Si está desarrollando en un dispositivo retina, posiblemente el problema esté relacionado con la resolución de su contexto gráfico. Intentarías con:

UIGraphicsBeginImageContextWithOptions(size, NO, 2.0f); 

Esto habilitará la resolución retina. Además, su imagen debe estar disponible con una resolución @ 2x para que esto funcione.

Si quieres apoyar a dispositivos que no son de la retina, así, puede utilizar:

if ([UIScreen instancesRespondToSelector:@selector(scale)]) { 
    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0f); 
} else { 
    UIGraphicsBeginImageContext(newSize); 
} 
+2

No recomendaría comprobar la igualdad de flotación usando '' ==. Todo lo que tienes que hacer es establecer la escala en '0.f', y el framework se encargará del resto. (ver http://stackoverflow.com/questions/2765537/how-do-i-use-the-nsstring-draw-functionality-to-create-a-uiimage-from-text) – Mazyod

+1

¡Muchas gracias! Esto resuelve el problema. 'if ([UIScreen instancesRespondToSelector: @selector (scale)])' - ¿esta línea es compatible con iOS3? La propiedad 'scale' se admite a partir de iOS 4.0. – tonytony

+0

@Mazyod ¿Tengo razón al entender que '0.0f' hará que la estructura maneje la escala correcta, independientemente de si es retina o no retina en el dispositivo currículo? – Timo

Cuestiones relacionadas