首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sRGB到NSColor

sRGB到NSColor
EN

Stack Overflow用户
提问于 2012-03-09 22:05:14
回答 3查看 2K关注 0票数 2

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

代码语言:javascript
复制
#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替换阴影颜色,它可以工作,但使用了错误的颜色。这就是我从link获得sRGB的地方

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

诚挚的问候

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-10 00:03:00

Use RGB not sRGB (使用RGB命令而不使用RGB命令)

可以使用RGB创建颜色,如下所示:

代码语言:javascript
复制
float red = 182.0f/256.0f;
float green = 182.0f/256.0f;
float blue = 182.0f/256.0f;


NSColor *color = [NSColor colorWithCalibratedRed:red green:green blue:blue alpha:1.0f];
票数 -4
EN

Stack Overflow用户

发布于 2012-03-10 08:22:59

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

你所需要做的就是像这样定义你的SRGB数组:

代码语言:javascript
复制
#define SRGB (CGFloat [4]){184.0/255.0, 184.0/255.0, 184.0/255.0, 1.0}

这样你的代码就能正常工作了。请注意,使用NSColorcolorWithCalibratedRed:green:blue:alpha:方法将不会为您的sRGB值提供正确的颜色。

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

代码语言:javascript
复制
@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

然后你可以这样做:

代码语言:javascript
复制
NSColor* someColor = [NSColor colorWith255sRGBRed:184.0 green:184.0 blue:184.0 alpha:1.0];
票数 6
EN

Stack Overflow用户

发布于 2019-02-20 06:11:27

以下是创建所需颜色的最简单、最现代的方法:

代码语言:javascript
复制
NSColor *color = [NSColor colorWithSRGBRed:(184.0 / 255.5) green:(184.0 / 255.5) blue:(184.0 / 255.5) alpha:1.0];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9635326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档