8
votes

Nscolor | Créer la couleur des valeurs RVB

Dans ma demande, je recevrai des valeurs RVB comme un caractère non signé afin qu'il ne soit pas plus de 255, J'utilise Nscolor API pour créer la couleur et utilisera la couleur pour dessiner la police et la couleur de fond,

Ceci est la fonction que j'ai écrite xxx

in Presque tous les cas, lorsque je comparais la couleur à l'aide de ma valeur RVB dans la bouche RVB, la couleur ne correspond pas, Par exemple, lorsque je passe,

r = 187, g = 170, B = 170,

Il devrait dessiner le gris clair, mais je reçois une couleur courante complète, dans ce cas,

Quelqu'un a une idée, ce que je fais mal,

genre Cordialement

Rohan


2 commentaires

Vous êtes sûr que votre moniteur est calibré de la couleur?


Dans quelle échelle passez-vous aux composants d'entrée? Est-ce sur 255?


3 Réponses :


5
votes

Si vous passez les composants d'entrée sur 255 et que vous souhaitez le limiter dans les 255 personnes à des fins de sécurité, vous pouvez essayer ceci:

cgfloat rfloat = R% 255.0; Cgfloat gfloat = g% 255.0; CGFLOAT BFLOAT = B% 255.0;

au lieu de diviser l'utilisation% valeur.


2 commentaires

La sécurité n'a rien à voir avec ça. Utilisation de % produira des valeurs hors de portée, en tant que + ColorWithCalibrated: vert: bleu: alpha méthode accepte les valeurs dans la plage 0-1.


Dans la réponse, j'ai mentionné que si vous passez des valeurs d'entrée supérieures à 255, puis si vous souhaitez le restreindre entre 255%. En outre,% 255 ne donnera pas de valeur hors de portée. Par exemple. 177% 255 donnera 177



11
votes

Le code fonctionne pour moi. Essayez de déboguer, vous êtes-vous rappeliez-vous d'appeler -set code> sur votre couleur après la création? Voici un exemple de code qui fonctionne:

static NSColor *colorFromRGB(unsigned char r, unsigned char g, unsigned char b)
{
    return [NSColor colorWithCalibratedRed:(r/255.0f) green:(g/255.0f) blue:(b/255.0f) alpha:1.0];
}

...

- (void)drawRect:(NSRect)rect {
    NSColor *c = colorFromRGB(50, 100, 255);
    [c set]; // <-- Important
    NSRectFill(rect);
}


2 commentaires

Merci Dietrich, même erreur que j'ai fait :(


Encore mieux, c'est si vous pouvez faire ce colorfromrgba , ajoutez un paramètre double A , puis attribuez-le à la valeur alpha: .



3
votes

Extension dans Swift 2

Vous pouvez utiliser cette extension qui accepte RVB (0-255) à partir de Photoshop, de croquis, etc. et renvoie une instance NSColor appropriée (veuillez vous déranger que certaines lignes de code source sont plus larges que présentées ici) : p> xxx pré>

} p>

Exemple Utilisez: P>

let myColor = NSColor.fromRGB(140, green: 150, blue: 155)
let mySemiTranspColor = NSColor.fromRGB(140, green: 150, blue: 155, alpha: 50)


1 commentaires

Merci! Cela fonctionne pour moi à Swift 5.5.