Objective c 将MKMapView渲染为NSImage
我正在为我的四架直升机开发一个导航系统,我需要将Objective c 将MKMapView渲染为NSImage,objective-c,cocoa,maps,mkmapview,render,Objective C,Cocoa,Maps,Mkmapview,Render,我正在为我的四架直升机开发一个导航系统,我需要将MKMapView中显示的航路点路线渲染成NSImage,以便进一步使用 到目前为止,我的情况如下: 正如您可以从中看到的,MKMapView是NSView的子类,因此我能够再次将其子类化以实现鼠标事件等 一切正常,最后一个目标是将该视图渲染到NSImage以供进一步使用,例如通过自己的图像浏览喜爱的路线 我对此做了一些研究,但没有找到我想要的 我能够用这种方法渲染地图,但没有注释/覆盖 - (NSImage *)captureMapView
MKMapView
中显示的航路点路线渲染成NSImage
,以便进一步使用
到目前为止,我的情况如下:
正如您可以从中看到的,
MKMapView
是NSView
的子类,因此我能够再次将其子类化以实现鼠标事件等
一切正常,最后一个目标是将该视图渲染到NSImage
以供进一步使用,例如通过自己的图像浏览喜爱的路线
我对此做了一些研究,但没有找到我想要的 我能够用这种方法渲染地图,但没有注释/覆盖
- (NSImage *)captureMapView {
__block NSImage *image;
/* Note : self is my custom subclass of MKMapKit, where everything is */
MKMapSnapshotOptions *options = [[MKMapSnapshotOptions alloc] init];
options.region = self.region;
options.size = self.frame.size;
MKMapSnapshotter *snapshotter = [[MKMapSnapshotter alloc] initWithOptions:options];
[snapshotter startWithCompletionHandler:^(MKMapSnapshot *snapshot, NSError *error) {
image = snapshot.image;
}];
return image;
}
输出:
可以看出,路线不在那里
更具体地说,圆圈由
MKPointAnnotation
s组成,路线为MKPolyline
。注释(在我的例子中是圆圈)是通过MKMapKit
方法-addAnnotation:
添加的,而路由是通过-addOverlay:
添加的
我肯定错过了一些东西。
谢谢你的帮助
尽管我认为从照片上看这已经足够明显了,但我正在开发10.11.4操作系统,10.8之前的Objective-C
bitmapImageRepForCachingDisplayInRect:
运行良好。似乎在这个版本之后,它停止了使用层备份视图。
请尝试以下操作:
+ (NSImage *)cacheImageForView:(NSView *)aView
{
NSRect originRect = [aView convertRect:[aView bounds] toView:[[aView window] contentView]];
NSRect rect = originRect;
rect.origin.y = 0;
rect.origin.x += [aView window].frame.origin.x;
rect.origin.y += [[aView window] screen].frame.size.height - [aView window].frame.origin.y - [aView window].frame.size.height;
rect.origin.y += [aView window].frame.size.height - originRect.origin.y - originRect.size.height;
CGImageRef cgimg = CGWindowListCreateImage(rect,
kCGWindowListOptionIncludingWindow,
(CGWindowID)[[aView window] windowNumber],
kCGWindowImageDefault);
return [[NSImage alloc] initWithCGImage:cgimg size:[aView bounds].size];
}
我们将尽快测试它。同时,无论如何,谢谢你!很高兴能提供帮助,很高兴我看到了关于无人机的这样的项目,我正在考虑自己建造一台FPV250赛车。顺便问一下,当电池耗尽时,你是如何处理这种情况的?嗯,软件功能强大,真的很强大。我可以得到电池电压并控制它。如果低于某一水平,自动程序将使无人机返回。无论如何,这是一个多功能地面站,我将能够在一个混合模式飞行(基于GPS,基于操纵杆)。FPV始终处于活动状态。没有无线电发射机,所有东西都通过TCP/UDP流传输到服务器上,这就是无人机。祝你好运!请随意发表评论和录音,我很想看看。