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

How to draw an NSImage, but fade out to the side (linear alpha gradient)?

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

我想修改这个自定义view,让图片在同一个地方绘制,但是在边上淡出。也就是说,它被绘制为线性渐变,从 alpha=1.0 到 alpha=0.0.

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

快速版本:差不多 但在 macOS 而不是 Android。

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

的图像

因为在绘制渐变的后备存储中已经存在的任何内容都会发生打孔,所以在使用它时要小心where/how。

  • 如果你想在视图的绘制中完成这一切,你应该使用 CGContextBeginTransparencyLayer 和 [=12= 在 transparency layer 中绘制图像和打孔渐变] 以防止打掉其他任何东西。
  • 您也可以首先创建一个新的 NSImage 来表示这个褪色的变体,或者使用 drawingHandler constructor or NSCustomImageRep 并在其中进行相同的图像和渐变绘制(不用担心透明层)。然后将该图像绘制到您的视图中,或者简单地将该图像与 NSImageView 一起使用。