48

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

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をLab *に変換し、それらを混合ます-RGBに戻し、その色を返します。

4

2 に答える 2

47

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

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

実験室の空間は、線形の変化が人間の目がある程度の色の変化として知覚するものに対応するように特別に設計されました。これは重要です。たとえば、他の色よりも緑に敏感であるため、色相と明度などの両方によって変化の認識が異なるためです。

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

于 2008-12-29T18:28:26.787 に答える
3

WICを使用すると、無料で cmyk<->rgb 変換を取得できます。しかし、それは.NET 3.0のみです

于 2008-12-29T18:37:15.940 に答える