Я занимаюсь разработкой приложения для iOS, в котором пользователь может изменить часть цвета изображения, например чашку чая, прикоснувшись к нему. Я использую алгоритм Floodfill для заливки цветов, так что пользователь должен нажать на чашку чая, чтобы изменить его цвет. Это работает нормально. Но окончательный цвет выглядит немного иначе, чем цвет замены. У меня возникла проблема с поиском лучшей логики для преобразования цвета объекта (чайной чашки) в выбранный цвет, учитывая его насыщенность и яркость.
Я использую следующую логику, чтобы получить цвет результата. Я представляю цвет как (оттенок, насыщенность, значение) .
touchedColor = (tchd_h, tchd_s, tchd_v); // I am not using this now
pixelColor = (old_h, old_s, old_v);
replacementColor = (new_h, new_s, new_v);
resultColor = (new_h, new_s, old_v);
pixelColor = resultColor;
Чашка перед покраской (обведена красным цветом).
Выбранная заменаЦвета.
Чашка после покраски на заменуЦвет (обведен красным).
См. Окончательное изображение выше. Поскольку я просто изменяю только оттенок и насыщенность , а не значение pixelColor , примененный цвет не похож на выбранный replaceColor . легкость изображения остается неизменной.
Если я изменю значение вместе с оттенком и насыщенностью , как это,
resultColor = (new_h, new_s, new_v);
pixelColor = resultColor;
Тогда чашка становится плоской, теряя свет и оттенки, как это,
Я хочу немного поработать над приведенной выше логикой, чтобы изменить цвет пикселя на соответствующий цвет замены. Может быть некоторая формула для получения насыщенности и значения .