将NSView渲染为图像:cacheDisplayInRect以与通常的drawRect调用不同的方式绘制透明区域

时间:2012-08-23 17:02:58

标签: cocoa nsview drawrect nsimage image-capture

问候!我遇到了问题,谷歌搜索没有结果......

我为我的NSView(子类)实现了drawRect方法,以绘制一些阴影和半透明填充。一切看起来都很棒!但是现在我需要从我的NSView(制作快照)创建一个NSImage,用于拖放目的。

它有效,但以不同的方式绘制:颜色较深而且不应该如此对比 为什么?也许是因为NSGraphicContext有不同的选择?需要帮助和/或建议!

以下是从NSView获取NSImage的代码:

- (NSImage *)makeImageSnapshot {

    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] autorelease];
    [image addRepresentation:bir];

    return image;
}

以下是可视化比较的图像:

  1. 正常 - 由drawRect通常调用:http://cl.ly/image/213C1Y1V0v2H
  2. 绘制
  3. 糟糕 - 被捕获到NSImage:http://cl.ly/image/183q442S2J14
  4. 认为差异可能看起来很小,相信我 - 在使用应用程序时很明显。我不承认为什么会这样。希望有人可以提供帮助...

    提前致谢!

1 个答案:

答案 0 :(得分:4)

我认为透明度问题是由于没有其它东西可以将其与其自身缓存时混合使用。

尝试-dataWithPDFInsideRect:或-dataWithEPSInsideRect:并从那里获取您的图像代表。