2011-01-05 97 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