Cocoa 将NSView渲染为图像:cacheDisplayInRect绘制透明区域与通常的drawRect调用不同
你好我有个问题,谷歌搜索没有结果 我为NSView(子类)实现了drawRect方法来绘制一些阴影和半透明填充。一切看起来都很棒!但现在我需要从NSView(生成快照)中创建一个NSImage,用于拖放目的 它可以工作,但绘制方式有所不同:颜色更暗,对比度也不如预期。Cocoa 将NSView渲染为图像:cacheDisplayInRect绘制透明区域与通常的drawRect调用不同,cocoa,nsview,drawrect,nsimage,image-capture,Cocoa,Nsview,Drawrect,Nsimage,Image Capture,你好我有个问题,谷歌搜索没有结果 我为NSView(子类)实现了drawRect方法来绘制一些阴影和半透明填充。一切看起来都很棒!但现在我需要从NSView(生成快照)中创建一个NSImage,用于拖放目的 它可以工作,但绘制方式有所不同:颜色更暗,对比度也不如预期。 为什么?也许是因为不同的选择?需要帮助和/或建议 以下是从NSView获取NSImage的代码: - (NSImage *)makeImageSnapshot { NSSize imgSize = self.bounds
为什么?也许是因为不同的选择?需要帮助和/或建议强> 以下是从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;
}
下面是要进行视觉比较的图像:
提前谢谢 我认为透明度问题是由于当它自己缓存时,没有其他东西来混合它造成的
尝试使用-dataWithPDFInsideRect:或-datawithepsiinside:并从那里获得您的图像复制。谢谢,Joshua!问题是,我在屏幕外渲染这个图像,这两种方法都会生成无效的图像,而且工作速度很慢。我知道的所有其他创建NSView快照的方法都无法保持透明度。看起来我必须纠正这个案例的drawRect。你的链接已经失效。你能把那些照片拿回来吗?把它们与问题本身联系起来可能是最好的。谢谢对不起,我错把它们永久删除了