我想用HardLight合成操作来绘制图像。我已经用next draw代码创建了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
发布于 2015-04-01 18:04:12
粗略地说,图像合成从源和目标获取一个像素、一个像素或两个像素,应用一些合成操作并将其写入目标。若要获得考虑到目标像素的任何效果,则在执行合成操作时必须知道该像素的颜色信息,该合成操作位于-drawRect:的实现中。
我假设你在这里谈论的是窗口混合(NSVisualEffectBlendingModeBehindWindow)的背后。NSVisualEffectView的问题是它不能绘制任何东西。相反,它定义了一个区域,该区域告诉WindowServer进程在该区域中执行其充满活力的操作。这发生在你的应用程序绘制它的视图之后。
因此,应用程序中的合成操作不能考虑窗口服务器稍后绘制的像素。简而言之,这是做不到的。
https://stackoverflow.com/questions/29290234
复制相似问题