0

我很惊讶在 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];
4

1 回答 1

1

在调用drawInRect:...图像“就是它是什么”方面。设置填充和描边只会影响原始操作。考虑这一点的一个好方法是意识到所有图像,矢量或光栅,都必须以相同的方式表现;在上下文中设置的当前填充颜色会影响基于光栅的图像的绘制,这会很奇怪,对吧?同样的想法——图像就是图像。矢量图像中也可能有多个路径,每个路径都有不同的填充。那些被在上下文中设置的填充颜色覆盖也没有意义。

阴影无论如何都有效,因为它实际上是一种合成操作;绘制具有给定阴影设置的给定图像会产生相同的阴影,无论该图像是基于光栅的还是其矢量等效的。

简而言之,如果你想改变图像的内容,你将不得不编写代码来从图像中提取向量,然后将它们绘制为图元。

或者,如果您只想用颜色填充任何填充区域,您可以使用矢量图像在上下文中创建蒙版,然后您可以在上下文中设置颜色并填充。这可能会产生预期的效果。

于 2013-02-22T13:09:01.193 回答