如何绘制NSImage,但淡出到侧面(线性alpha渐变)?

时间:2017-03-10 21:55:54

标签: macos core-graphics appkit nsimage

我有一个生成为NSImage的图像,然后使用自定义draw()方法将其绘制到我的NSView子类中。

我想修改这个自定义视图,以便在同一个地方绘制图像,但它会在侧面淡出。也就是说,它绘制为线性渐变,从alpha = 1.0到alpha = 0.0。

我最好的猜测是使用NSCompositingOperation的draw()变体之一可能帮助我做我想要的,但我很难理解他们如何做到这一点。我不是图形专家,NSImage和NSCompositingOperation文档似乎使用了不同的术语。

快速版本:非常this question,但在macOS上而不是Android。

1 个答案:

答案 0 :(得分:2)

你走在正确的轨道上。您需要使用NSCompositingOperationDestinationOut来实现此目的。这将根据绘制的源的alpha有效地打出目标。因此,如果您首先绘制图像,然后在.destinationOut操作的顶部绘制从alpha 0.0到1.0的渐变,那么最终将使用alpha 1.0到0.0的图像

因为在后备存储中已经绘制了渐变的任何内容中都会发生这种打击,所以您需要注意在何处/如何使用它。

  • 如果您想在视图的绘图中完成所有操作,则应使用CGContextBeginTransparencyLayerCGContextEndTransparencyLayertransparency layer内绘制图像和打孔渐变防止其他任何事情发生。
  • 你也可以先创建一个新的NSImage来代表这个褪色的变体,使用drawingHandler constructorNSCustomImageRep并使用相同的图像&在那里进行渐变绘图(不用担心透明层)。然后将该图像绘制到您的视图中,或者只是将该图像与NSImageView一起使用。