Question

J'essaie de dessiner une ombre intérieure dans un NSView.L'ombre en elle-même n'est pas le problème, mais le réglage des couleurs me rend dingue :/

#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

Si je remplace la couleur de l'ombre par [NSColor redColor], cela fonctionne mais avec la mauvaise couleur.C'est de là que j'ai obtenu le sRGB : lien

La façon de convertir sRGB en NSColor est tirée d'un autre article d'ici mais cela ne fonctionne évidemment pas.

cordialement

Était-ce utile?

La solution

Utilisez rgb pas srgb :

Vous pouvez créer une couleur avec RVB comme ceci:

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

Autres conseils

Votre code est presque entièrement correct, le seul problème est que vous utilisez des valeurs numériques comprises entre 0 et 255 dans votre tableau.Tous les NSColor utilisation des méthodes de création CGFloat valeurs de 0 à 1,0.

Il ne vous reste plus qu'à définir votre SRGB tableau comme ceci :

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

Votre code fonctionnera alors correctement.Veuillez noter qu'en utilisant le colorWithCalibratedRed:green:blue:alpha: méthode de NSColor volonté pas vous donne la bonne couleur à partir de vos valeurs sRGB.

Pour obtenir des valeurs sRGB correctes, vous devez utiliser la méthode de votre code d'origine, qui utilise spécifiquement l'espace colorimétrique sRGB pour créer la couleur.Une catégorie sur NSColor qui crée des couleurs en utilisant des valeurs sRGB basées sur 255 pourrait ressembler à ceci :

@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

Ensuite, vous pourriez simplement faire ceci :

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

Voici le moyen le plus simple et le plus moderne de créer la couleur dont vous avez besoin:

NSColor *color = [NSColor colorWithSRGBRed:(184.0 / 255.5) green:(184.0 / 255.5) blue:(184.0 / 255.5) alpha:1.0];

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top