2012-03-09 5 views
1

NSView에서 내부 그림자를 그리려고합니다. 그림자 자체는 문제가되지 않지만 색상 설정은 나를 미치게된다/sRGB to NSColor

#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로 변환하는 방법은 여기에서 다른 게시물에서 가져 왔지만 분명히 작동하지 않습니다.

안부

답변

-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]; 
+0

덕분에, 나는 안 미안 해요 당신의 대답을 밀어 내기에 충분한 명성을 얻으십시오. – jopjip

+0

@jopjip 아무런 문제가 없지만, 이것이 당신을 도왔다 고 다행입니다. –

+2

이것은 *** 아닙니다 *** sRGB 값을 사용하여 색상을 생성하는 것과 같습니다. 이것은 현재 보정 된 RGB 색상 공간을 사용하여 색상을 생성합니다. 이는 분명 sRGB로 보장되지 않습니다. sRGB 값을 입력하면 올바른 색상을 얻지 못합니다. –

6

귀하의 코드는, 유일한 문제는 거의 정확하다 배열에서 0에서 255 사이의 숫자 값을 사용 중입니다. NSColor 생성 방법은 모두 0-1.0의 값인 CGFloat을 사용합니다.

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

귀하의 코드는 다음 제대로 작동합니다

당신이해야 할 모든

지금처럼 SRGB 배열을 정의 할 수 있습니다. colorWithCalibratedRed:green:blue:alpha: 방법을 사용하면 NSColor이 아니며은 올바른 sRGB 값을 제공합니다.

올바른 sRGB 값을 얻으려면 원래 코드에서 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 

그런 다음 당신은 그냥이 할 수있는 : 색상이 같은 보일 수 255 기반의 sRGB 값을 사용하여 생성 NSColor에 카테고리

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

굉장합니다. 내 자신의 목적을 위해 해제 :) – uchuugaka