如何计算RGB颜色的亮度?

时间:2012-02-27 18:58:14

标签: objective-c rgb brightness hsb

我有我的功能:

-(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);
}

这对我不起作用。

例如:r:84 g:67 b:73。功能返回72.760002。在Photoshop中,此颜色的亮度为33%。怎么了?

感谢。

2 个答案:

答案 0 :(得分:5)

使用UIColorNSColor

-(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
    }
}

答案 1 :(得分:4)

您的RGB值范围为0到255,而不是0到99 - 如果您想以百分比结束,则需要先将它们分开:

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

此外,“亮度”和RGB值之间没有单一转换 - Photoshop可能使用的公式与您不同。如果您想了解更多信息,我建议Charles Poynton使用"Gamma FAQ""Color FAQ"