Я разрабатываю приложение для 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;
Чашка перед покраской (обведена красным цветом).
Выбранный цвет замены (replacementColor).
Чашка после закрашивания цвета замены (обведена красным цветом).
Смотрите окончательное изображение выше. Поскольку я изменяю только оттенок и насыщенность, а не значение pixelColor, примененный цвет не похож на выбранный replacementColor. светлота изображения остается неизменной.
Если я изменю значение вместе с оттенком и насыщенностью вот так,
resultColor = (new_h, new_s, new_v);
pixelColor = resultColor;
то чашка станет плоской, без света и оттенков, как здесь,
Мне нужна идея, как подстроить приведенную выше логику, чтобы изменить цвет пикселя на соответствующий цвет замены. Может быть, есть какая-то формула для получения насыщенности и значения.