MKOverlay Вид размыт - PullRequest
       30

MKOverlay Вид размыт

2 голосов
/ 07 ноября 2010

Я пытаюсь добавить изображение png в качестве пользовательской карты, используя MKOverlayView.Я почти на месте - я могу выстроить изображение в нужном месте, и я знаю, что -drawMapRect: метод в подклассе MKOverlayView вызывается периодически;Я просто не могу заставить изображение правильно визуализироваться.Это полностью размыто, почти до неузнаваемости.Я также знаю, что изображение достаточно большое (это 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);

Кто-нибудь знает, что происходит?

Спасибо!Матф

Ответы [ 3 ]

4 голосов
/ 26 ноября 2010

У меня была похожая проблема.Проблема была в том, что мой boundingMapRect был определен неправильно.Полное изображение отрисовывается в уменьшенном виде, если на плитке мало масштаба.Затем карта масштабируется, и не все плитки изображений находятся в плитках boundingMapRect, поэтому они не перерисовываются в правильном масштабе, а уменьшенная версия увеличивается.По крайней мере, так я думаю.

Надеюсь, это поможет.

2 голосов
/ 13 января 2011

избавиться от CGContextScaleCTM (context, 1.0, -1.0);и вместо этого сделайте вертикальный переворот на вашем изображении в режиме предварительного просмотра.кажется, что mapkit использует контекстную информацию, чтобы определить, какая часть изображения должна отображаться более четко.Знайте, это было давно, но надеюсь, что это поможет!

0 голосов
/ 28 ноября 2016

Спасибо, Роб, ты сделал мой день. Мое размытое изображение наложения стало более резким, когда я заменил

CGContextScaleCTM(context, 1.0, -1.0);

с

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