Как рассчитать яркость цвета RGB?
У меня есть моя функция:
-(void)rgbToHSBWithR:(float)red G:(float)green B:(float)blue {
float brightness = red * 0.3 + green * 0.59 + blue * 0.11; // found in stackru
NSLog(@"%f",brightness);
}
и это не работа для меня.
например: r:84 г:67 b:73. возврат функции 72.760002. В фотошопе яркость для этого цвета составляет 33%. В чем дело?
Благодарю.
2 ответа
Решение
Использование UIColor
или же 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
}
}
Ваши значения RGB варьируются от 0 до 255, а не от 0 до 99 - вам нужно сначала разделить их, если вы хотите получить процент:
float brightness = (red / 255.0) * 0.3 + (green / 255.0) * 0.59 + (blue / 255.0) * 0.11;
Кроме того, не существует единого преобразования между значениями "яркость" и RGB - возможно, Photoshop использует другую формулу, чем вы. Если вы хотите узнать больше, я рекомендую Чарльз Пойнтон "Gamma FAQ" и "Color FAQ".