2012-02-27 2 views
3

я получил свою функцию:как рассчитать яркость цвета RGB?

-(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%. Что не так?

Спасибо.

+0

Это будет работать, если вы разделили результат на '255.0f'. – Sulthan

+0

Я делюсь на 255, прежде чем звонить. это работа –

ответ

5

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 
    } 
} 
+0

это работает! спасибо –

+0

Просто отказ в том, что '[color getHue: & h saturation: & s яркость: & b alpha: NULL]' доступен в iOS 5.0 или новее. – avelis

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 может использовать другую формулу, чем вы. Если вы хотите узнать больше, я рекомендую "Gamma FAQ" и "Color FAQ" Чарльзом Пойнтоном.