MKOverlay视图模糊

时间:2010-11-07 09:35:36

标签: iphone core-graphics mkmapview overlay cgimage

我正在尝试使用MKOverlayView将png图像添加为自定义地图。我差不多了 - 我能够在正确的位置排列图像,我知道MKOverlayView的子类中的-drawMapRect:方法是定期调用的;我似乎无法让图像正确渲染。它完全模糊,几乎无法辨认。我也知道图像足够大(它是1936×2967)。这是我的-drawMapRect代码:

- (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context{


    // Load image from applicaiton bundle
    NSString* imageFileName = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"map.jpg"];
    CGDataProviderRef provider = CGDataProviderCreateWithFilename([imageFileName UTF8String]);
    CGImageRef image = CGImageCreateWithJPEGDataProvider(provider, NULL, true, kCGRenderingIntentDefault);
    CGDataProviderRelease(provider);

    // save context before screwing with it
    CGContextSaveGState(context);
    CGContextScaleCTM(context, 1.0, -1.0);
    CGContextSetAlpha(context, 1.0);

    // get the overlay bounds
    MKMapRect theMapRect = [self.overlay boundingMapRect];
    CGRect theRect = [self rectForMapRect:theMapRect];

    // Draw image
    CGContextDrawImage(context, theRect, image);
    CGImageRelease(image);
    CGContextRestoreGState(context);

有没有人知道发生了什么?

谢谢!    -Matt

3 个答案:

答案 0 :(得分:4)

我遇到了类似的问题。问题是我的boundingMapRect定义不正确。当图块上的比例较小时,将缩小整个图像。然后缩放地图,并且并非所有图像切片都位于boundingMapRect切片中,因此不会以正确的比例重新绘制它们,并缩小缩小的版本。至少这就是我的想法。

希望这有帮助。

答案 1 :(得分:2)

摆脱CGContextScaleCTM(context,1.0,-1.0);并在预览中对图像进行垂直翻转。 mapkit似乎使用上下文信息来确定要更清晰地呈现图像的哪个部分。知道它已经有一段时间了,但希望它有所帮助!

答案 2 :(得分:0)

谢谢罗布,你做了我的一天。当我替换

时,我的模糊叠加图像变得尖锐
CGContextScaleCTM(context, 1.0, -1.0);

CGAffineTransform flipVertical = CGAffineTransformMake(1, 0, 0, -1, 0, theRect.size.height);
CGContextConcatCTM(context, flipVertical);