2

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);

誰が何が起こっているのか手がかりを持っていますか?

ありがとう!-マット

4

3 に答える 3

4

同様の問題がありました。問題は、boundingMapRect が正しく定義されていなかったことです。タイルの縮尺が小さい場合、画像全体が縮小されてレンダリングされます。次に、マップがズームされ、すべての画像タイルが boundingMapRect タイルにあるわけではないため、正しい縮尺で再描画されず、縮小されたバージョンがズームされます。少なくとも私はそうなると思います。

お役に立てれば。

于 2010-11-26T13:59:45.267 に答える
2

CGContextScaleCTM(context, 1.0, -1.0); を取り除きます。代わりに、プレビューで画像を上下反転させます。マップキットは、コンテキスト情報を使用して、画像のどの部分をより明確にレンダリングするかを決定しているようです。しばらく経ちましたが、お役に立てば幸いです。

于 2011-01-13T10:19:22.073 に答える
0

ありがとうロブ、あなたは私の一日を作りました。置き換えたときにぼかしオーバーレイ画像が鮮明になりました

CGContextScaleCTM(context, 1.0, -1.0);

CGAffineTransform flipVertical = CGAffineTransformMake(1, 0, 0, -1, 0, theRect.size.height);
CGContextConcatCTM(context, flipVertical);  
于 2016-11-27T21:18:15.593 に答える