MKOverlay View размыт

Я пытаюсь добавить изображение 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);

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

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


person mag725    schedule 07.11.2010    source источник
comment
Правильно ли масштабируется содержимое изображения в соответствии с содержимым карты?   -  person Jeroen    schedule 07.11.2010
comment
Хотя код, который у меня здесь, не отражает этого, я устанавливаю границы своего наложения в соответствии с размером самого изображения - что странно, так это то, что кажется, что он только хочет перерисовать карту в нижнем левом углу карты. В этом районе все выглядит более-менее нормально.   -  person mag725    schedule 07.11.2010


Ответы (3)


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

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

person Yuval    schedule 26.11.2010
comment
Да, спасибо. Оказывается, я использовал неправильное соотношение сторон для своего изображения. - person mag725; 27.11.2010

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

person Rob    schedule 13.01.2011
comment
Спасибо за ваш ответ. У меня была та же проблема, что и у @ mag725. Это решает мою проблему. - person rockeye; 27.07.2011

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

CGContextScaleCTM(context, 1.0, -1.0);

с участием

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