Cocoa 为什么bitmapImageRepForCachingDisplayInRect:创建空图像?

Cocoa 为什么bitmapImageRepForCachingDisplayInRect:创建空图像?,cocoa,nsview,nsbitmapimagerep,Cocoa,Nsview,Nsbitmapimagerep,我有一段非常简单的代码,用来捕获视图的位图。这曾经在Leopard中起作用,但在SnowLeopard中似乎坏得可怕 以下是对按下窗口上的按钮作出响应的代码: - (IBAction)snapshot:(id)sender { NSView* view = [[sender window] contentView]; NSBitmapImageRep* bitmap = [view bitmapImageRepForCachingDisplayInRect:[vi

我有一段非常简单的代码,用来捕获视图的位图。这曾经在Leopard中起作用,但在SnowLeopard中似乎坏得可怕

以下是对按下窗口上的按钮作出响应的代码:

- (IBAction)snapshot:(id)sender
{
    NSView* view = [[sender window] contentView];
    NSBitmapImageRep* bitmap
        = [view bitmapImageRepForCachingDisplayInRect:[view bounds]];
    NSData *tiff = [bitmap TIFFRepresentation];
    [tiff writeToFile:[@"~/Desktop/snapshot.tiff" stringByExpandingTildeInPath]
           atomically:YES];
}
单击按钮拍摄快照只会生成完全透明的图像

我是完全不懂,还是位图缓存方法被破坏了


可以找到一个简单的项目—基本上是一个starter NSDocument项目,带有调用此代码的按钮。

-bitmapImageRepForCachingDisplayInRect:
实际上没有捕获任何内容;它只是生成一个空白位图,准备缓存。您需要调用
-cacheDisplayInRect:toBitmapImageRep:
来执行此操作。

如果存在高分辨率图像(即2536x 1200),则cacheDisplay将忽略图像视图