从 NSView 制作 NSImage
Making an NSImage out of an NSView
我知道如何创建一个 NSImage
描述一个 NSView
及其所有子视图,但我想要的是一个 NSImage
视图 忽略 它的子视图。我可以想出使用 NSView
的子类来执行此操作的方法,但我希望尽可能避免子类化。有人有什么想法吗?
我建议在屏幕外制作所需 NSView 的副本并拍摄快照。
隐藏子视图,抓取图像,取消隐藏子视图:
NSMutableArray* hiddenViews = [[NSMutableArray] alloc init];
for (NSView* subview in [self subviews]) {
if (subview hidden) [hiddenViews addObject: subview];
else [subview setHidden:YES];
}
NSSize imgSize = self.bounds.size;
NSBitmapImageRep * bir = [self bitmapImageRepForCachingDisplayInRect:[self bounds]];
[bir setSize:imgSize];
[self cacheDisplayInRect:[self bounds] toBitmapImageRep:bir];
NSImage* image = [[NSImage alloc] initWithSize:imgSize];
[image addRepresentation:bir];
for (NSView* subview in [self subviews]) {
if (![hiddenViews containsObject: subview])
[subview setHidden:NO];
}
我知道如何创建一个 NSImage
描述一个 NSView
及其所有子视图,但我想要的是一个 NSImage
视图 忽略 它的子视图。我可以想出使用 NSView
的子类来执行此操作的方法,但我希望尽可能避免子类化。有人有什么想法吗?
我建议在屏幕外制作所需 NSView 的副本并拍摄快照。
隐藏子视图,抓取图像,取消隐藏子视图:
NSMutableArray* hiddenViews = [[NSMutableArray] alloc init];
for (NSView* subview in [self subviews]) {
if (subview hidden) [hiddenViews addObject: subview];
else [subview setHidden:YES];
}
NSSize imgSize = self.bounds.size;
NSBitmapImageRep * bir = [self bitmapImageRepForCachingDisplayInRect:[self bounds]];
[bir setSize:imgSize];
[self cacheDisplayInRect:[self bounds] toBitmapImageRep:bir];
NSImage* image = [[NSImage alloc] initWithSize:imgSize];
[image addRepresentation:bir];
for (NSView* subview in [self subviews]) {
if (![hiddenViews containsObject: subview])
[subview setHidden:NO];
}