2011-01-05 12 views
16

Mam MKMapView o rozmiarze 64x64. Tworzę obraz z widoku mapy za pomocą metody "renderInContext:". I przypisanie obrazu do obrazuViewTelViewView. W normalnym telefonie iPhone obraz jest poprawny. Ale w iPhone'ie (Retina) obraz jest niewyraźny. Mam to w symulatorze, a nie w rzeczywistym urządzeniu. Załączam zrzuty ekranu poniżej.MKMapView renderInContext - iPhone 4 (Retina) numer

alt text

Miniaturka na lewym boku, z zaokrąglonymi narożnikami jest ImageView w UITableViewCell użytkownika. Miniatura po prawej stronie to MKMapView.

Korzystam z następującego kodu, aby uzyskać obraz z widoku mapy.

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

Dlaczego tak się dzieje w telefonie iPhone (Retina)? Jak to naprawić?

+2

Spróbuj odpowiedź: http://stackoverflow.com/questions/4219496/rendering-mkmapview-to-uiimage-with-real-resolution/4219721#4219721 – Anna

+0

Hai sir Gudevening, jak stworzyć miniatury (75 * 75) obraz z mkmapview? Jak wyżej obrazek ... jeśli masz jakąś możliwość, podaj kod przykładowy ... dziękuję. –

Odpowiedz

23

jak już mężczyzn tioned w previous answer I gave:

użytkowania UIGraphicsBeginImageContextWithOptions zamiast UIGraphicsBeginImageContext:

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

Zobacz QA1703 więcej szczegółów. Mówi:

Uwaga: Począwszy od iOS 4, UIGraphicsBeginImageContextWithOptions umożliwia podanie ze skalą czynnika. Współczynnik skali wynoszący zero ustawia go na na współczynnik skali ekranu głównego urządzenia . Dzięki temu można uzyskać najostrzejszą, najbardziej stabilną migawkę ekranu , w tym wyświetlacz Retina o rozmiarze .

+2

Bardzo dziękuję .. – EmptyStack

+0

To jest dla mnie uwaga, ponieważ wciąż szukam tego pytania i wpadam w zakłopotanie. Obiekt UIImage zwrócony z UIGraphicsGetImageFromCurrentImageContext() w tym przypadku będzie miał 64 x 64, a nie 128x128, jak mogłoby się wydawać - UIImage (i podstawowy CGImage) ma dodatkową właściwość skali. Wprowadziłem obraz do tekstury GL i używając rozmiaru obrazu (punktu), zapominając, że muszę pomnożyć to przez skalę, aby uzyskać wymiary w pikselach. Czy staram się pamiętać, że następnym razem, w przyszłości mnie. – davehayden

1

Czy mógłbyś podać przykładowy kod (ponieważ jestem naprawdę zainteresowany tym, jak to zrobiłeś, to dla mnie nowość ^^)
I to, co zrobiłem w porównywalnej sytuacji, tworzę obraz z podwójną wielkość i pozwól automatycznie kurczyć przez UIImageView (ustawienie właściwości zmianą rozmiaru, aby zmieścić wszystkie granice)

EDIT: ale myślę, że powinno dokonać ScaleToFill automatycznie

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

Jak ustawić właściwość zmiany rozmiaru? W rzeczywistości widok obrazu to imageView UITableViewCell. – EmptyStack

+0

poprawiony kod. –

Powiązane problemy