首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于NSVisualEffectView的混合

基于NSVisualEffectView的混合
EN

Stack Overflow用户
提问于 2015-03-27 06:44:26
回答 1查看 892关注 0票数 2

我想用HardLight合成操作来绘制图像。我已经用next draw代码创建了NSImageView:

代码语言:javascript
复制
- (void)drawRect:(NSRect)dirtyRect {
//[super drawRect:dirtyRect];

if (self.image != NULL) {
    [self.image drawInRect:self.bounds fromRect:NSZeroRect operation:NSCompositeHardLight fraction:1.0];
}

}

在通常情况下,它工作得很好。但它不能在NSVisualEffectView上工作。

如何在NSVisualEffectView上混合HardLight?

在下面链接的图像中,你可以看到圆角矩形,它混合了窗口背景和彩色图像上的HardLight。但在NSVisualEffectView (红色底部矩形)上,它只绘制灰色。

https://www.dropbox.com/s/bcpe6vdha6xfc5t/Screenshot%202015-03-27%2000.32.53.png?dl=0

EN

回答 1

Stack Overflow用户

发布于 2015-04-01 18:04:12

粗略地说,图像合成从源和目标获取一个像素、一个像素或两个像素,应用一些合成操作并将其写入目标。若要获得考虑到目标像素的任何效果,则在执行合成操作时必须知道该像素的颜色信息,该合成操作位于-drawRect:的实现中。

我假设你在这里谈论的是窗口混合(NSVisualEffectBlendingModeBehindWindow)的背后。NSVisualEffectView的问题是它不能绘制任何东西。相反,它定义了一个区域,该区域告诉WindowServer进程在该区域中执行其充满活力的操作。这发生在你的应用程序绘制它的视图之后。

因此,应用程序中的合成操作不能考虑窗口服务器稍后绘制的像素。简而言之,这是做不到的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29290234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档