我试图在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]替换阴影颜色,它可以使用但颜色错误。这是我从link
获得sRGB的地方将sRGB转换为NSColor的方法取自此处的另一篇文章,但显然它不起作用。
最好的问候
答案 0 :(得分:6)
您的代码几乎完全正确,唯一的问题是您在数组中使用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}
您的代码将正常运行。请注意,使用colorWithCalibratedRed:green:blue:alpha:
NSColor
方法将不从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];
答案 1 :(得分:0)
这是创建所需颜色的最简单,最现代的方法:
NSColor *color = [NSColor colorWithSRGBRed:(184.0 / 255.5) green:(184.0 / 255.5) blue:(184.0 / 255.5) alpha:1.0];
答案 2 :(得分:-4)
使用 RGB 而非 sRGB :
您可以使用RGB创建颜色:
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];