我很惊讶在Stackoverflow上找不到这个答案。
我有一个pdf格式的矢量路径,比如Safari或Mac App Store应用程序通常用作图像图标。
现在,我想在代码中指定填充颜色和自定义阴影,而不是制作图像并导出它们。我没弄明白怎么做。
阴影有效,但填充颜色没有 谁能告诉我怎么做?
[NSGraphicsContext saveGraphicsState];
{
// Has no effect
[[NSColor colorWithCalibratedRed:0.92f green:0.97f blue:0.98f alpha:1.00f] setFill];
// Neither has this
[[NSColor colorWithCalibratedRed:0.92f green:0.97f blue:0.98f alpha:1.00f] set];
NSShadow *shadow = [NSShadow new];
[shadow setShadowOffset:NSMakeSize(0, -1)];
[shadow setShadowColor:[NSColor blackColor]];
[shadow setShadowBlurRadius:3.0];
[shadow set];
[image drawInRect:imgRect
fromRect:NSZeroRect
operation:NSCompositeXOR
fraction:1.0
respectFlipped:YES
hints:nil];
}
[NSGraphicsContext restoreGraphicsState];
答案 0 :(得分:1)
在调用drawInRect:...
方面,图像“就是这样”。设置填充和描边将仅影响基本操作。考虑这一点的一个好方法是要意识到所有图像,矢量或光栅都必须以相同的方式运行;如果在上下文中设置的当前填充颜色会影响基于光栅的图像的绘制,那会是奇怪的吗?同样的想法 - 图像是图像。矢量图像中可能还有多个路径,每个路径都有不同的填充。对于那些被上下文中的填充颜色集覆盖的人也没有意义。
阴影无论如何都是有效的,因为它实际上是一个合成操作;使用给定的阴影设置绘制给定图像会产生相同的阴影,无论图像是基于光栅还是等效的矢量。
简而言之,如果你想改变图像的内容,你将不得不编写代码来从图像中提取矢量,然后将它们绘制成图元。
或者,如果您只想用颜色填充任何填充区域,您可以使用矢量图像在上下文中创建遮罩,然后您可以设置颜色 在上下文中,填写。 可能产生预期的效果。