为什么bitmapImageRepForCachingDisplayInRect:创建一个空图像?

时间:2009-10-15 18:32:22

标签: cocoa nsview nsbitmapimagerep

我有一个非常简单的代码,用于捕获视图的位图。这曾经在Leopard中运行,但在Snow Leopard中看起来非常糟糕。

这是代码,响应按下窗口上的按钮:

- (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];
}

单击按钮拍摄快照只会产生完全透明的图像。

我在这里完全无能为力,还是这个位图缓存方法被破坏了?

一个简单的项目 - 基本上是一个启动的NSDocument项目,带有一个调用此代码的按钮 - 可以找到here

1 个答案:

答案 0 :(得分:14)

-bitmapImageRepForCachingDisplayInRect:实际上没有抓住任何东西;它只是生成一个准备好缓存的空白位图。您需要致电-cacheDisplayInRect:toBitmapImageRep:来执行此操作。