2011-01-05 12 views
16

Tengo una MKMapView de tamaño 64x64. Estoy creando una imagen desde la vista de mapa usando el método 'renderInContext:'. Y asignando la imagen al imageView de UITableViewCell. En un iPhone normal, muestra la imagen correcta. Pero en iPhone (Retina) está mostrando la imagen borrosa. Estoy probando esto en el simulador, no en el dispositivo real. He adjuntado las capturas de pantalla a continuación.MKMapView renderInContext - iPhone 4 (Retina) problema

alt text

la imagen en el lado izquierdo, con las esquinas redondeadas es imageView del UITableViewCell. La miniatura en el lado derecho es MKMapView.

Estoy usando el siguiente código para obtener la imagen de la vista del mapa.

UIGraphicsBeginImageContext(CGSizeMake(64, 64)); 
CGContextRef context = UIGraphicsGetCurrentContext(); 
[[mapView layer] renderInContext:context]; 
thumbnail_image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

¿Por qué ocurre esto en iPhone (Retina)? ¿Cómo arreglar esto?

+2

Prueba esta respuesta: http://stackoverflow.com/questions/4219496/rendering-mkmapview-to-uiimage-with-real-resolution/4219721#4219721 – Anna

+0

Hai Sir Gudevening, Cómo crear la imagen en miniatura (75 * 75) ¿imagen de mkmapview? Al igual que la imagen de arriba ... si tienes alguna posibilidad por favor proporciona el código de muestra ... gracias. –

Respuesta

23

Como ya hombres cionado en un previous answer I gave:

Uso UIGraphicsBeginImageContextWithOptions en lugar de UIGraphicsBeginImageContext:

UIGraphicsBeginImageContextWithOptions(CGSizeMake(64, 64), NO, 0.0); 

Ver QA1703 para más detalles. Dice:

Nota: A partir de IOS 4, UIGraphicsBeginImageContextWithOptions le permite proporcionar con un factor de escala. Un factor de escala de cero lo establece en el factor de escala de la pantalla principal del dispositivo . Esto le permite obtener la instantánea más nítida y de mayor resolución de la pantalla, que incluye una pantalla Retina .

+2

Muchas gracias .. – EmptyStack

+0

Esta es una nota para mí, ya que sigo buscando esta pregunta y me confundo. El UIImage devuelto por UIGraphicsGetImageFromCurrentImageContext() en este caso será 64x64, no 128x128 como se podría pensar: UIImage (y CGImage subyacente) tiene una propiedad de escala adicional. Estaba colocando la imagen en una textura GL y usando el tamaño de la imagen (punto), olvidando que necesito multiplicar eso por la escala para obtener las dimensiones en píxeles. Trata de recordar que la próxima vez, en el futuro yo. – davehayden

1

¿podría dar algunos ejemplos de código (porque estoy realmente interesado cómo hecho de que, de hecho, que es nuevo para mí ^^)
Y lo que he hecho en una situación comparable puedo crear una imagen con el doble de la tamaño y luego dejar que se encogen automáticamente por UIImageView (ajuste de las propiedades de cambio de tamaño para adaptarse a todas las fronteras)

EDIT: pero creo que debería hacer el ScaleToFill automáticamente

UIGraphicsBeginImageContext(CGSizeMake(128, 128));  
… 
myImageView.frame = CGRectMake(0, 0, 64, 64); 
myImageView.contentMode = UIViewContentModeScaleToFill; 
+0

¿Cómo establecer la propiedad de cambio de tamaño? En realidad, la vista de la imagen es imageView de UITableViewCell. – EmptyStack

+0

código corregido. –

Cuestiones relacionadas