gpt4 book ai didi

xcode - 在 NSVisualEffectView 上混合

转载 作者:行者123 更新时间:2023-12-03 16:35:31 26 4
gpt4 key购买 nike

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

- (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

最佳答案

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

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

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

关于xcode - 在 NSVisualEffectView 上混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29290234/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com