如何绘制 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 一起使用。
我有一个生成为 NSImage 的图像,然后我使用自定义 draw() 方法将它绘制到我的 NSView 子类中。
我想修改这个自定义view,让图片在同一个地方绘制,但是在边上淡出。也就是说,它被绘制为线性渐变,从 alpha=1.0 到 alpha=0.0.
我最好的猜测是带有 NSCompositingOperation 的 draw() 变体之一可能会帮助我做我想做的事,但我无法理解他们如何做到这一点。我不是图形专家,NSImage 和 NSCompositingOperation 文档似乎使用了不同的术语。
快速版本:差不多
你走在正确的轨道上。您需要使用 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 一起使用。