Как смешивать цвета, "естественно" с C#?
Я должен смешать некоторые цвета естественным образом. Это значит
blue + yellow = green
blue + red = purple
и так далее. Я получил цвета как RGB-значения. Когда я пытаюсь смешать их, я получил правильный " RGB " - результаты, такие как
green + red = yellow
yellow + blue = white
но не правые"естественн-влажн-краска" -результаты. Любая хорошая идея, как смешать RGB естественным образом?
было бы здорово, если бы кто-то знал решение внутри Microsoft.Xna.Framework.Graphics
пространство имен, но общее решение также поможет :)
@Jay Базузи:
пожалуйста, разместите образец кода, который показывает что ты пытаешься сделать.
конечно - это моя функция для смешивания двух 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 и верните этот цвет.
3 ответов
"естественная влажная краска" немного неоднозначна; смешивание CMYK, как предложено, не будет работать, потому что вы все еще добавляете цвета.
Если вы хотите получить результаты, как в Photoshop (как проверено Jon B), вам нужно использовать L*A*B* space. формулы для преобразования RGB в/из лаборатории и описанием здесь.
лабораторное пространство было специально спроектировано так, чтобы линейные изменения соответствовали тому, что человеческий глаз воспринимает как определенное изменение цвета. Этот важно, потому что, например, мы более чувствительны к зеленому, чем к другим цветам, потому что мы воспринимаем изменения по-разному в зависимости от оттенка и легкости и т. д..
попытка любых других предлагаемых в настоящее время методов не только приведет к цветам, которые вы не хотите, но и не будет представлять собой "постоянное" изменение цвета, особенно если вы используете это для чего-то, где постоянное изменение имеет значение, как градиент.
есть хорошая статья для преобразования RGB в Lab В C# at http://www.codeproject.com/KB/recipes/colorspace1.aspx.
вы получаете CMYK rgb преобразование бесплатно с WIC. но это только .NET 3.0