Macos 如何绘制NSImage,但向侧面淡出(线性alpha渐变)?
我有一个生成为NSImage的图像,然后使用自定义draw()方法将其绘制到NSView子类中 我想修改此自定义视图,以便在同一位置绘制图像,但图像在侧面淡出。也就是说,它被绘制为线性渐变,从alpha=1.0到alpha=0.0 我最好的猜测是NScompositionOperation的draw()变体之一可能会帮助我做我想做的事情,但我很难理解它们是如何做到这一点的。我不是一个图形专家,NSImage和NSCompositingOperation文档似乎使用了不同的术语Macos 如何绘制NSImage,但向侧面淡出(线性alpha渐变)?,macos,core-graphics,appkit,nsimage,Macos,Core Graphics,Appkit,Nsimage,我有一个生成为NSImage的图像,然后使用自定义draw()方法将其绘制到NSView子类中 我想修改此自定义视图,以便在同一位置绘制图像,但图像在侧面淡出。也就是说,它被绘制为线性渐变,从alpha=1.0到alpha=0.0 我最好的猜测是NScompositionOperation的draw()变体之一可能会帮助我做我想做的事情,但我很难理解它们是如何做到这一点的。我不是一个图形专家,NSImage和NSCompositingOperation文档似乎使用了不同的术语 快速版:基本上是在
快速版:基本上是在macOS上,而不是在Android上。你走对了方向。您需要使用
nscompositionOperationDestinationOut
来实现这一点。这将根据正在绘制的源的alpha有效地打孔出目标。因此,如果您首先绘制图像,然后在顶部使用.destinationOut操作绘制从alpha 0.0到1.0的渐变,那么最终的图像将使用alpha 1.0到0.0
因为这种打孔发生在渐变绘制到的背景存储中的任何东西上,所以您需要小心使用它的位置/方式
- 如果您想在视图的图形中完成这一切,您应该使用
和CGContextBeginTransparencyLayer
在一个窗口中绘制图像和打孔渐变,以防止打孔其他任何内容CGContextEndTransparencyLayer
- 您还可以首先创建一个新的NSImage来表示这个褪色的变体,或者使用or并在其中绘制相同的图像和渐变(不必担心透明度层)。然后将该图像绘制到视图中,或者简单地将该图像与NSImageView一起使用
- 你走对了方向。您需要使用
nscompositionOperationDestinationOut
来实现这一点。这将根据正在绘制的源的alpha有效地打孔出目标。因此,如果您首先绘制图像,然后在顶部使用.destinationOut操作绘制从alpha 0.0到1.0的渐变,那么最终的图像将使用alpha 1.0到0.0
因为这种打孔发生在渐变绘制到的背景存储中的任何东西上,所以您需要小心使用它的位置/方式
- 如果您想在视图的图形中完成这一切,您应该使用
和CGContextBeginTransparencyLayer
在一个窗口中绘制图像和打孔渐变,以防止打孔其他任何内容CGContextEndTransparencyLayer
- 您还可以首先创建一个新的NSImage来表示这个褪色的变体,或者使用or并在其中绘制相同的图像和渐变(不必担心透明度层)。然后将该图像绘制到视图中,或者简单地将该图像与NSImageView一起使用