Как смешивать цвета, "естественно" с 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