各ノードに値が付いた三角形(例:(A,B,C) -> (0.3, 0.1, 0.7)
)があります。 (1.0、緑:青、0.5 0.0赤色)の値は、以下の機能を有するRGB色にマッピングされるPathGradientBrushを使用した三角形の色勾配
var color = Color.FromArgb(alpha,
(int)((value > 0.5 ? 2*value - 1 : 0) * 255),
(int) ((value > 0.5 ? 2-2*value : 2*value) * 255),
(int)((value > 0.5 ? 0 : (1 - 2 * value)) * 255)
);
これらの値は、重心座標によって三角形(例えば、重量で線形補間されることを意図されています)、完全なアプリケーションでは、より大きな三角形のメッシュです。
ドローイングでは、3つのコーナーとその間にあるいくつかの点にポイントを持つGraphicsPath
を作成します(この例ではおそらく残念です)。 PathGradientBrush
では、私はSurroundColors
の色をコーナーの値またはそれらの間の線形補間に設定しました。 CenterPoint
とCenterValue
は、(A+B+C)/3
とvalues.Sum()/3
に設定されています。これは、ここでいくつかの値((0.0, 0.5, 1.0)
のためによさそうだ:
が、(ここでは(0.3, 0.8, 1.0)
、三角形の上部にあるアーティファクトを参照してください)他の人のためにあまりよくありません:
私は他のいくつかの戦略を試しました(例えば、中心点までの距離を重み付けし、他の場所に配置するなど)。しかし、これらのアーティファクトを取得するには三角形が必要ですが、描画はペイントハンドラで行われなければならず、スロー。どのように私は
- 中心色を取り除くとOpenGL
- またはそれらの成果物にはつながらない中央値および/または位置を得るのように色付け三角形をゲットすることができます。
コード問題を再現し、(疑問に貼り付けるには少し多すぎる)の周りに再生する:http://pastebin.com/gjjzqRvY
私はLGBrushでこれを行うことはできません。 [制限事項と解決方法はこちら]を参照してください(http://stackoverflow.com/questions/30339553/fill-panel-with-gradient-in-three-colors/30341521?s=2|0.2326#30341521) – TaW
@TaW:一般的には可能ではありませんが、この特定のユースケースでは可能です。下の私の答えを見てください。 –