Функция разложения цвета на оттенки. - страница 19

 

Прости, Петр - дальше без меня. Я уже все сказал по этому поводу. Нет желания повторяться.

Нет никаких твоих и моих алгоритмов. 

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

void Gradient(uint clr1,uint clr2,uint &arr[],uint size)
  {
   if(size==0) return;
   ArrayResize(arr,size);
   arr[0]=clr1; 
   rgb c1,c2;
   c1.clr=clr1;
   c2.clr=clr2;
   double R1=c1.c[2],G1=c1.c[1],B1=c1.c[0];
   double R2=c2.c[2],G2=c2.c[1],B2=c2.c[0];
   double deltaR=(R2-R1)/(size-1);
   double deltaG=(G2-G1)/(size-1);
   double deltaB=(B2-B1)/(size-1);
   R1 += 0.4999;
   G1 += 0.4999;
   B1 += 0.4999;
   for(uint i=1;i<size;i++)
     {
      R1+=deltaR; c1.c[2]=uchar (R1);
      G1+=deltaG; c1.c[1]=uchar (G1);
      B1+=deltaB; c1.c[0]=uchar (B1);
      arr[i]=c1.clr;
     }
  }
 
Nikolai Semko:

Прости, Петр - дальше без меня. Я уже все сказал по этому поводу. Нет желания повторяться.

Нет никаких твоих и моих алгоритмов. 

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

Николай, я за объективность. Приложил скрипт и скриншоты. 

Знаю, что ты любишь совершенствовать свои решения. Я тоже. 

Твой алгоритм (к сожалению) создает неверный градиент. Ошибку я в нем не искал, потому что не знаю, как он работает. Но ты можешь это сделать.  

 
Реter Konow:

Николай, я за объективность. Приложил скрипт и скриншоты. 

Знаю, что ты любишь совершенствовать свои решения. Я тоже. 

Твой алгоритм (к сожалению) создает неверный градиент. Ошибку я в нем не искал, потому что не знаю, как он работает. Но ты можешь это сделать.  

https://www.mql5.com/ru/forum/282861/page7#comment_8971634

https://www.mql5.com/ru/forum/282861/page9#comment_8987611

https://www.mql5.com/ru/forum/282861/page11#comment_8987978

https://www.mql5.com/ru/forum/282861/page19#comment_9019253
 

Да, ты считаешь, что твой алгоритм работает правильно, потому что он соответствует твоей теории правильности его работы. Я это понял.

Однако, я за эталон беру палитру виндоус. Если сравнивать вывод твоего алгоритма с палитрой - разница значительна. Это видно и по цифрам и визуально. 

Это все что я хотел показать. 

Можешь оставить так. Так тоже красиво.

 
Реter Konow:

Да, ты считаешь, что твой алгоритм работает правильно, потому что он соответствует твоей теории правильности его работы. Я это понял.

Однако, я за эталон беру палитру виндоус. Если сравнивать вывод твоего алгоритма с палитрой - разница значительна. Это видно и по цифрам и визуально. 

Это все что я хотел показать. 

Можешь оставить так. Так тоже красиво.

ты не видишь, что я пишу. Тот подход, на котором я остановился, и который ты называешь моим алгоритмом, мне самому не нравиться(меньше зло). Но твой подход мне не нравиться еще больше и я объяснил почему. 

 
Nikolai Semko:

ты не видишь, что я пишу. Тот подход, на котором я остановился, и который ты называешь моим алгоритмом, мне самому не нравиться(меньше зло). Но твой подход мне не нравиться еще больше и я объяснил почему. 

Ну, тогда тебе не нравится и палитра Виндоус. Ведь у меня с ней почти полное совпадение.

 
Реter Konow:

Ну, тогда тебе не нравится и палитра Виндоус. Ведь у меня с ней почти полное совпадение.

я уже писал об этом.

и не путай палитру и градиент. Градиент - это одномерное понятие, а палитра это двух или трех, или 4 (если речь идет о CMYK) мерное. 

Напимер:

это двумерная палитра красного цвета

 

а это его одномерный гадиент

Ты пытаешься спорить на тему, где нужен стык двух градиентов (от черного к цвету и от цвета к белому). Ты утверждаешь, что вариан посередине является единственно верным, т.к. он используется в винде в Paint. В твоих примерах выше, где фигурирует только одна составляющая цвета, а остальные равны 0, да - это правильнее, но это лишь частный случай. Я же ничего не утверждаю, а только лишь говорю, что это зависит от решаемой задачи, но логичным считаю ставить в самом общем случае в зависимости от светлоты цвета (сумма R+B+G).

Например, в более серьезных графических редакторах, таких как от компаний Corel и  Adobe, когда речь идет о градиентной заливке, существует настройка "цента тяжести" градиента:

это спор не о чём. 

Я катапультируюсь с этой темы.

 
Nikolai Semko:


Я говорю о цветовом диапазоне. Градиент может быть разным. Но полный диапазон оттенков одного цвета - постоянным. 

У каждого цвета есть три компоненты, - три точки на графике. Через них проходят три линии.  Каждая линия имеет два отрезка на графике. Отрезки появляются от преломления света. Ось преломления находится в центре графика. Каждый отрезок имеет свой угол восхождения. Восхождение идет от нулевого значения к максимальному. Все шесть отрезков построенные на графике представляют собой призму.  Их углы - постоянны для каждого диапазона. Задача, - найти значение компонент в каждой точке этих отрезков. Так я нахожу все оттенки одного цвета. Все остальное, - производные манипуляции с этим решением. Можно менять углы восхождения, можно смешивать цвета и прочее. Основа остается неизменной. 

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


зы. Насчет центра тяжести - согласен. Но это просто манипуляция с вычислениями конкретных точек на графике. Можно на первом отрезке получить больше значений компонент, чем во втором. Так и получится "смещенный центр тяжести градиента" (как на примере выше).

 
А слабо крестики-нолики забацать?
 

График выглядит примерно так:



И ко всему этому, я пришел просто наблюдая за поведением цифр в окошках палитры виндоус.