Библиотеки: OK Color Space - страница 2

 
Dmitry Fedoseev #:

Для определения цвета текста в зависимости от цвета фона можно примерно так: переводим в серый:

Если значение больше 0.5 - значит, фон светлый, если ниже - темный.

Тоже наверное хороший вариант, не проверял. Будут небольшие отличия от алгоритма с OKhsl, но думаю это не важно, вычислять зато будет быстрее.

 
Maxim Savochkin #:

Эту библиотеку как раз можно использовать и для определения "светлоты" цвета - формат OKhsl правильно определяет "светлоту" (lightness) для любого оттенка. Например, часто желтый оттенок выглядит светлее, а синий темнее - OKhsl учитывает эту особенность и рассчитывает "реальную светлоту", как она воспринимается человеческим глазом.

Я использую такую функцию для выбора между черным и белым цветом текста:

Получается, что если lightness фона меньше 64, то нужен белый текст, а если больше 64, то черный.

Вместо 64 можно использовать другое значение, но мне кажется что это лучше всего подходит.

Я не люблю ООП, точнее не знаю его, поэтому стараюсь обходится без него, где это возможно.

 
Dmitry Fedoseev #:

Для определения цвета текста в зависимости от цвета фона можно примерно так: переводим в серый:

Если значение больше 0.5 - значит, фон светлый, если ниже - темный.

Спасибо.

Добавил в копилочку знаний)

 
Dmitry Fedoseev #:

Для определения цвета текста в зависимости от цвета фона можно примерно так: переводим в серый:

Если значение больше 0.5 - значит, фон светлый, если ниже - темный.

Интересный подход.

Вот только не могу понять, что нужно подать на вход функции.

Получили цвет фона, что делать дальше?

double RGBtoGraySimple(double aR,double aG,double aB)
//+------------------------------------------------------------------+ 
//| Функция получает цвет фона графика.                              | 
//+------------------------------------------------------------------+ 
color ChartBackColorGet(const long chart_ID=0) 
  { 
//--- подготовим переменную для получения цвета 
   long result=clrNONE; 
//--- сбросим значение ошибки 
   ResetLastError(); 
//--- получим цвет фона графика 
   if(!ChartGetInteger(chart_ID,CHART_COLOR_BACKGROUND,0,result)) 
     { 
      //--- выведем сообщение об ошибке в журнал "Эксперты" 
      Print(__FUNCTION__+", Error Code = ",GetLastError()); 
     } 
//--- вернем значение свойства графика 
   return((color)result); 
  } 
 
Vitaly Muzichenko #:

Интересный подход.

Вот только не могу понять, что нужно подать на вход функции.

Получили цвет фона, что делать дальше?

R, G, B подать на вход.
   double GetR(color aColor)
     {
      return(aColor&0xff);
     }

   double GetG(color aColor)
     {
      return((aColor>>8)&0xff);
     }

   double GetB(color aColor)
     {
      return((aColor>>16)&0xff);
     }
 
Maxim Savochkin #:

По-моему в верхней полосе что-то произошло из-за сжатия изображения, можете проверить мой код:

А что могло произойти при сжатии-то? Стало лучше видно контрастные места.

Вот без сжатия:

и оно же со сжатием:

Мне кажется, автор пытался выжать больше яркости или насыщенности, чем возможно. 

 
Dmitry Fedoseev #:

А что могло произойти при сжатии-то? Стало лучше видно контрастные места.

Вот без сжатия:

и оно же со сжатием:

Мне кажется, автор пытался выжать больше яркости или насыщенности, чем возможно. 

Я не вижу на изображении в посте таких же более ярких полосок (оранжевую, зеленую и фиолетовую) как на вашем изображении, не знаю с чем это связано, нет желания спорить. Вашу мысль я понял, можно подобрать значения saturation и lightness, чтобы переход между оттенками был еще более плавным.

 
Maxim Savochkin #:

Я не вижу на изображении в посте таких же более ярких полосок (оранжевую, зеленую и фиолетовую) как на вашем изображении, не знаю с чем это связано, нет желания спорить. Вашу мысль я понял, можно подобрать значения saturation и lightness, чтобы переход между оттенками был еще более плавным.

Не знаете с чем связано? А не меняли изображение?

Я вот сейчас взял изображение из этого коммента - https://www.mql5.com/ru/forum/446484#comment_47400646 и взял изображение из поста, сжал его и они... о чудо! Не совпали:

 
Dmitry Fedoseev #:

Не знаете с чем связано? А не меняли изображение?

Я вот сейчас взял изображение из этого коммента - https://www.mql5.com/ru/forum/446484#comment_47400646 и взял изображение из поста, сжал его и они... о чудо! Не совпали:

Последнее обновление поста: 24 мая 2023 (до Вашего комментария). Возможно, такой эффект возникает из-за использования формата JPEG (потеря качества) или из-за использования графического редактора (тоже потеря качества при изменении размера изображения). В любом случае, благодарен Вам за проявленный интерес к теме! Не буду больше спорить, так как Вы явно опытнее меня и на MQL создали намного больше полезных программ. Желаю добра)

 
Maxim Savochkin #:

Последнее обновление поста: 24 мая 2023 (до Вашего комментария). Возможно, такой эффект возникает из-за использования формата JPEG (потеря качества) или из-за использования графического редактора (тоже потеря качества при изменении размера изображения). В любом случае, благодарен Вам за проявленный интерес к теме! Не буду больше спорить, так как Вы явно опытнее меня и на MQL создали намного больше полезных программ. Желаю добра)

Спасибо, посмеялся. 

Причина обращения: