Проверьте, является ли UIColor темным или ярким?

Я должен определить, является ли выбранный UIColor (выбранный пользователем) темным или ярким, таким образом, я могу изменить цвет строки текста, который находится к тому же цвет для лучшей удобочитаемости.

Вот пример в Flash/Actionscript (с демонстрацией): http://web.archive.org/web/20100102024448/http://theflashblog.com/?p=173

Какие-либо мысли?

С наилучшими пожеланиями, Andre

ОБНОВЛЕНИЕ

Благодаря общим предложениям вот рабочий код:

- (void) updateColor:(UIColor *) newColor
{
    const CGFloat *componentColors = CGColorGetComponents(newColor.CGColor);

    CGFloat colorBrightness = ((componentColors[0] * 299) + (componentColors[1] * 587) + (componentColors[2] * 114)) / 1000;
    if (colorBrightness < 0.5)
    {
        NSLog(@"my color is dark");
    }
    else
    {
        NSLog(@"my color is light");
    }
}

Спасибо еще раз :)

100
задан TheNeil 22 May 2019 в 14:49
поделиться

3 ответа

У W3C есть следующее: http://www.w3.org/WAI/ER/WD-AERT/# цвет-контраст

Если вы делаете только черный или белый текст, используйте расчет яркости цвета выше. Если ниже 125, используйте белый текст. Если 125 или выше, используйте черный текст.

редактировать 1: сдвиг в сторону черного текста. :)

редактировать 2: Используемая формула: ((значение красного цвета * 299) + (значение зеленого цвета * 587) + (значение синего цвета * 114)) / 1000.

72
ответ дан 24 November 2019 в 04:51
поделиться

Если вы хотите найти яркость цвета, вот некоторый псевдокод:

public float GetBrightness(int red, int blue, int green)
{
    float num = red / 255f;
    float num2 = blue / 255f;
    float num3 = green / 255f;
    float num4 = num;
    float num5 = num;
    if (num2 > num4)
        num4 = num2;
    if (num3 > num4)
        num4 = num3;
    if (num2 < num5)
        num5 = num2;
    if (num3 < num5)
        num5 = num3;
    return ((num4 + num5) / 2f);
}

Если он> 0,5, он яркий, в противном случае - темный.

0
ответ дан 24 November 2019 в 04:51
поделиться

Для всего, что не является серым, инверсия цвета RGB обычно сильно контрастирует с этим. Демонстрация просто инвертирует цвет и обесцвечивает его (преобразует его в серый).

Но создать приятную успокаивающую комбинацию цветов довольно сложно. Посмотрите на:

http://particletree.com/notebook/calculating-color-contrast-for-legible-text/

2
ответ дан 24 November 2019 в 04:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: