2011-01-05 18 views
16

Sto avendo un MKMapView di dimensioni 64x64. Sto creando un'immagine dalla vista mappa usando il metodo 'renderInContext:'. E assegnando l'immagine a imageView di UITableViewCell. Nel normale iPhone, mostra l'immagine corretta. Ma in iPhone (Retina) mostra l'immagine sfocata. Sto testando questo nel simulatore, non nel dispositivo reale. Ho allegato le schermate qui sotto.MKMapView renderInContext - problema di iPhone 4 (Retina)

alt text

La miniatura sul lato sinistro, con spigoli arrotondati è IMAGEVIEW del UITableViewCell. L'anteprima sul lato destro è MKMapView.

Sto usando il seguente codice per ottenere l'immagine dalla vista mappa.

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

Perché questo accade in iPhone (Retina)? Come risolvere questo?

+2

Prova questa risposta: http://stackoverflow.com/questions/4219496/rendering-mkmapview-to-uiimage-with-real-resolution/4219721#4219721 – Anna

+0

Hai Sir Gudevening, Come creare la miniatura (75 * 75) immagine da mkmapview? Come sopra l'immagine ... se hai qualche possibilità di fornire il codice di esempio ... grazie. –

risposta

23

Come già gli uomini citate nel un previous answer I gave:

Uso UIGraphicsBeginImageContextWithOptions invece di UIGraphicsBeginImageContext:

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

Vedere QA1703 per maggiori dettagli. Dice:

Nota: A partire da iOS 4, UIGraphicsBeginImageContextWithOptions consente di fornire con una scala di fattore. Un fattore di scala pari a zero lo imposta sul fattore di scala della schermata principale del dispositivo della schermata principale del dispositivo. Ciò consente di ottenere lo istantanea dello schermo più nitida e con la massima risoluzione , incluso uno schermo Retina .

+2

Grazie mille .. – EmptyStack

+0

Questa è una nota a me stesso da quando continuo a cercare su questa domanda e confondermi. UIImage restituito da UIGraphicsGetImageFromCurrentImageContext() in questo caso sarà 64x64, non 128x128 come si potrebbe pensare - UIImage (e il CGImage sottostante) ha una proprietà di scala aggiuntiva. Stavo mettendo l'immagine in una texture GL e usando la dimensione dell'immagine (punto), dimenticando che ho bisogno di moltiplicarla per la scala per ottenere le dimensioni in pixel. Cerca di ricordare che la prossima volta, futuro me. – davehayden

1

potrebbe fornire alcuni esempi di codice (perché io sono veramente interessato come hai fatto che in realtà è una cosa nuova per me ^^)
E quello che ho fatto in una situazione analoga creo un'immagine con il doppio dimensioni e poi lasciarlo ridursi automaticamente dal UIImageView (impostando le proprietà di ridimensionamento per adattarsi a tutte le frontiere)

EDIT: ma penso che dovrebbe rendere il ScaleToFill automaticamente

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

Come impostare la proprietà di ridimensionamento? In realtà la vista dell'immagine è l'imageView di UITableViewCell. Codice – EmptyStack

+0

corretto. –

Problemi correlati