web-dev-qa-db-ja.com

C#で「自然に」色を混ぜる方法は?

自然な方法でいくつかの色を混ぜる必要があります。これの意味は

blue + yellow = green 
blue + red = purple

等々。色はRGB値として取得しました。それらを混合しようとすると、適切な「RGB」結果が得られました

green + red = yellow
yellow + blue = white

しかし、適切な「自然に濡れた塗装」の結果ではありません。自然な方法でRGBを混合する方法はありますか?

誰かがMicrosoft.Xna.Framework.Graphics名前空間内のソリューションを知っていればすばらしいのですが、一般的なソリューションも役立ちます:)


@ジェイバズジ:

実行しようとしていることを示すコードサンプルを投稿してください。

確かに-これは2つの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をL a b *に変換し、それらを混合して、RGBに戻し、その色を返します。

45
crono

「ナチュラルウェットペイント」は少しあいまいです。まだ色を追加しているため、提案されているCMYKの混合は機能しません。

Photoshopのような結果が必要な場合(Jon Bがチェックされているように)、L * a * b *スペースを使用する必要があります。RGBとの間でRGBを変換するための式ラボと説明 ここにあります

実験室のスペースは、線形の変化が人間の目で特定の量の色の変化として認識されるものに対応するように特別に設計されています。これは重要です。私たちは他の色よりも緑に敏感です。なぜなら、色合いや明度などによって変化が異なると感じているためです。

現在提案されている他の方法を試しても、望ましくない色が生じるだけでなく、特にグラデーションのように一定の変化が重要な場合にこれを使用すると、「一定に見える」色の変化が表れません。 。

46
Jason Cohen

RGBをLabにC#に変換するための優れた記事が http://www.codeproject.com/KB/recipesにあります/colorspace1.aspx

18
Mark Cidade

[〜#〜] wic [〜#〜] を使用すると、cmyk <-> rgb変換が無料で得られます。 .NET 3.0のみです

3
Bart