2011-01-05 103 views
16

我有一個大小爲64x64的MKMapView。我使用'renderInContext:'方法從地圖視圖創建圖像。並將圖像分配給UITableViewCell的imageView。在正常的iPhone中,它顯示正確的圖像。但在iPhone(視網膜)顯示圖像模糊。我在模擬器中測試它,而不是在實際的設備中。我附上了下面的屏幕截圖。MKMapView renderInContext - iPhone 4(Retina)問題

alt text

在左側的縮略圖,圓角是UITableViewCell中的ImageView的。右側的縮略圖是MKMapView。

我正在使用以下代碼從地圖視圖中獲取圖像。

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

爲什麼在iPhone(視網膜)中發生這種情況?如何解決這個問題?

+2

嘗試這樣的回答:http://stackoverflow.com/questions/4219496/rendering-mkmapview-to-uiimage-with-real-resolution/4219721#4219721 – Anna 2011-01-05 11:46:12

+0

海Gudevening爵士,如何創建縮略圖(75 * 75)來自mkmapview的圖像?像上面的圖片...如果你有任何可能性PLZ提供示例代碼...謝謝。 – 2011-12-20 13:22:19

回答

23

如前所述男人tioned在previous answer I gave

使用UIGraphicsBeginImageContextWithOptions而不是UIGraphicsBeginImageContext

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

詳情請參閱QA1703。它說:

注:從iOS 4的, UIGraphicsBeginImageContextWithOptions 允許你帶刻度 因素提供啓動。比例因子爲零將其設置爲 主屏幕的比例因子。這使您能夠獲得最清晰,最高分辨率的 顯示屏快照,包括 視網膜顯示屏。

+2

非常感謝你.. – EmptyStack 2011-01-05 13:37:18

+0

這是對自己的一個提示,因爲我一直在搜索這個問題並且感到困惑。在這種情況下,從UIGraphicsGetImageFromCurrentImageContext()返回的UIImage將是64x64,而不是您可能認爲的128x128 - UIImage(和底層的CGImage)具有額外的scale屬性。我將圖像放入GL紋理並使用圖像(點)大小,忘記我需要將其乘以比例以獲得像素尺寸。請儘量記住下次,未來的我。 – davehayden 2012-04-10 18:21:39

1

可以請你提供一些示例代碼(因爲我真的很感興趣你是如何做到的,實際上它對我來說是新的^^)
而我在類似情況下所做的創建一個圖像的雙尺寸,然後讓它通過UIImageView自動收縮下來(設置調整大小的屬性,以適應所有邊界)

編輯:,但我認爲它應該使ScaleToFill自動

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

如何設置resize屬性?其實圖像視圖是UITableViewCell的imageView。 – EmptyStack 2011-01-05 11:43:40

+0

代碼更正。 – 2011-01-05 13:36:40