C# で「自然に」色を混ぜるにはどうすればいいですか? 質問する

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に変換します1つのb* を混ぜて、RGB に戻してその色を返します。

ベストアンサー1

「自然なウェットペイント」は少し曖昧です。提案されているように CMYK を混ぜても、色を追加しているため機能しません。

Photoshop のような結果が必要な場合は (Jon B が確認したように)、L*a*b* 空間を使用する必要があります。RGB から Lab への変換式と説明ここにある

ラボ空間は、線形変化が人間の目が一定量の色の変化として認識するものに対応するように特別に設計されています。これは、たとえば、色相と明度などに応じて変化を異なる方法で認識するため、人間は他の色よりも緑に敏感であるため重要です。

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

おすすめ記事