gpt4 book ai didi

cocoa - sRGB 到 NSColor

转载 作者:行者123 更新时间:2023-12-03 16:38:19 25 4
gpt4 key购买 nike

我正在尝试在 NSView 中绘制内部阴影。阴影本身不是问题,但颜色设置让我发疯:/

#define ShadowBlurRadius 10.0
#define SRGB (CGFloat [4]){184.0, 184.0, 184.0, 1.0}

@implementation SWShadowedView

- (void)drawRect:(NSRect)dirtyRect {

NSGraphicsContext *context = [NSGraphicsContext currentContext];
[context saveGraphicsState];

[context setCompositingOperation:NSCompositePlusDarker];


NSBezierPath *path = [NSBezierPath bezierPathWithRect:NSMakeRect(0, dirtyRect.size.height -ShadowBlurRadius, self.superview.frame.size.width, ShadowBlurRadius)];

[[NSColor whiteColor] setStroke];

NSShadow * shadow = [[NSShadow alloc] init];

NSColorSpace *colorSpace = [NSColorSpace sRGBColorSpace];

NSColor *color = [NSColor colorWithColorSpace:colorSpace components:SRGB count:4];

[shadow setShadowColor:color];

[shadow setShadowBlurRadius:ShadowBlurRadius];
[shadow set];

[path stroke];

[context restoreGraphicsState];

[super drawRect:dirtyRect];
}

@end

如果我用 [NSColor redColor] 替换阴影颜色,它可以工作,但颜色错误。这是我从以下位置获取 sRGB 的位置:link

将 sRGB 转换为 NSColor 的方法取自此处的另一篇文章,但显然它不起作用。

最诚挚的问候

最佳答案

您的代码几乎完全正确,唯一的问题是您在数组中使用 0-255 之间的数值。所有 NSColor 创建方法都使用 0-1.0 之间的 CGFloat 值。

您需要做的就是定义您的 SRGB 数组,如下所示:

#define SRGB (CGFloat [4]){184.0/255.0, 184.0/255.0, 184.0/255.0, 1.0}

然后您的代码将正常工作。请注意,使用 NSColorcolorWithCalibrateRed:green:blue:alpha: 方法将无法根据 sRGB 值提供正确的颜色。

要获取正确的 sRGB 值,您必须使用原始代码中的方法,该方法专门使用 sRGB 颜色空间来创建颜色。 NSColor 上使用基于 255 的 sRGB 值创建颜色的类别可能如下所示:

@implementation NSColor (sRGB_Additions)
+ (NSColor *)colorWith255sRGBRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha
{
CGFloat sRGBComponents[4] = {red / 255.0, green / 255.0, blue / 255.0, alpha};
NSColorSpace *colorSpace = [NSColorSpace sRGBColorSpace];
return [NSColor colorWithColorSpace:colorSpace components:sRGBComponents count:4];
}
@end

那么你可以这样做:

NSColor* someColor = [NSColor colorWith255sRGBRed:184.0 green:184.0 blue:184.0 alpha:1.0];

关于cocoa - sRGB 到 NSColor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9635326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com