Question

J'ai ma fonction:

-(void)rgbToHSBWithR:(float)red G:(float)green B:(float)blue {

float brightness = red * 0.3 + green * 0.59 + blue * 0.11; // found in stackoverflow
NSLog(@"%f",brightness);
}

Et ça ne marche pas pour moi.

Par exemple: r: 84 g: 67 b: 73. Retour de fonction 72.760002. Dans la luminosité de Photoshop pour cette couleur est de 33%. Qu'est-ce qui ne va pas?

Merci.

Était-ce utile?

La solution

Utilisation UIColor ou NSColor:

-(void)rgbToHSBWithR:(float)red G:(float)green B:(float)blue {
    // assuming values are in 0 - 1 range, if they are byte representations, divide them by 255
    UIColor *color = [UIColor colorWithRed:red green:green blue:blue alpha:1];

    float h, s, b;
    if ([color getHue:&h saturation:&s brightness:&b alpha:NULL])
    {
        // h, s, & b now contain what you need
    }
}

Autres conseils

Vos valeurs RVB varient de 0 à 255, pas de 0 à 99 - vous devez d'abord les diviser si vous voulez vous retrouver avec un pourcentage:

float brightness = (red / 255.0) * 0.3 + (green / 255.0) * 0.59 + (blue / 255.0) * 0.11;

De plus, il n'y a pas de conversion unique entre les valeurs de "luminosité" et RVB - Photoshop peut utiliser une formule différente de celle que vous êtes. Si vous voulez en savoir plus, je recommande le "Gamma FAQ" et "FAQ de couleur" par Charles Poynton.

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