Как смешивать цвета "естественно" с С#?
Мне нужно смешать некоторые цвета естественным образом. Это означает
blue + yellow = green
blue + red = purple
И так далее. Я получил цвета как RGB-значения. Когда я пытаюсь их смешивать, я получил правильные "RGB" - результаты, такие как
green + red = yellow
yellow + blue = white
Но не правильная "естественная влажная краска" - результат. Любая хорошая идея, как правильно сочетать RGB?
Было бы здорово, если бы кто-то знал решение в пространстве имен Microsoft.Xna.Framework.Graphics
, но общее решение также помогло бы:)
@Jay Bazuzi:
Пожалуйста, разместите образец кода, который показывает что вы пытаетесь сделать.
Конечно - это моя функция для смешивания двух цветов RGB.
public Color colorMixer(Color c1, Color c2)
{
int _r = Math.Min((c1.R + c2.R),255);
int _g = Math.Min((c1.G + c2.G),255);
int _b = Math.Min((c1.B + c2.B),255);
return new Color(Convert.ToByte(_r),
Convert.ToByte(_g),
Convert.ToByte(_b));
}
То, что я прочитал до сих пор в этом потоке, очень многообещающе - я преобразую C1 и C2 в Lab *, смешаю их - преобразуйте обратно в RGB и верните этот цвет.
Ответы
Ответ 1
"Натуральная влажная краска" немного неоднозначна; смешение CMYK, как было предложено, не будет работать, потому что вы все еще добавляете цвета.
Если вам нужны результаты, как в Photoshop (как проверено Джоном Б.), вам нужно использовать пространство L * a * b *. Формулы для преобразования RGB в/из Лаборатории и описание здесь.
Лабораторное пространство было специально спроектировано таким образом, чтобы линейные изменения соответствовали тому, что человеческий глаз воспринимает как определенное изменение цвета. Это важно, поскольку, например, мы более чувствительны к зеленому, чем другие цвета, потому что мы воспринимаем изменения по-разному в зависимости от оттенка и легкости и т.д.
Попытка использования любых других методов, предлагаемых в настоящее время, приведет не только к цветам, которые вы не хотите, но также не будет представлять собой "постоянное" изменение цвета, особенно если вы используете это для чего-то, как градиент.
Ответ 2
Существует хорошая статья для преобразования RGB в Lab на С# в http://www.codeproject.com/KB/recipes/colorspace1.aspx.
Ответ 3
Вы получаете бесплатное преобразование cmyk ↔ rgb с WIC. , но только .NET 3.0