代码之家  ›  专栏  ›  技术社区  ›  Matt

有没有一种简单的方法可以混合两个system.drawing.color值?

  •  16
  • Matt  · 技术社区  · 15 年前

    有两种简单的混合方法吗 System.Drawing.Color 价值观?或者我需要写自己的方法来吸收两种颜色并将它们组合起来?

    如果我这样做了,人们会怎么做?

    3 回复  |  直到 9 年前
        1
  •  32
  •   Timwi    15 年前

    为此,我写了一个实用方法。:)

    /// <summary>Blends the specified colors together.</summary>
    /// <param name="color">Color to blend onto the background color.</param>
    /// <param name="backColor">Color to blend the other color onto.</param>
    /// <param name="amount">How much of <paramref name="color"/> to keep,
    /// “on top of” <paramref name="backColor"/>.</param>
    /// <returns>The blended colors.</returns>
    public static Color Blend(this Color color, Color backColor, double amount)
    {
        byte r = (byte) ((color.R * amount) + backColor.R * (1 - amount));
        byte g = (byte) ((color.G * amount) + backColor.G * (1 - amount));
        byte b = (byte) ((color.B * amount) + backColor.B * (1 - amount));
        return Color.FromArgb(r, g, b);
    }
    
        2
  •  5
  •   Drew Noakes    13 年前

    如果你想以一种对人眼更自然的方式混合颜色,你应该考虑在不同的颜色空间中对RGB进行操作,例如 L*a*b* ,HSL,HSB。

    有一个伟大的 code project article on colour spaces 以c中的示例为例。

    您可能喜欢使用L*A*B*,因为它的设计是为了线性化对颜色差异的感知,因此应该产生优雅的渐变。

        3
  •  3
  •   Aurojit Panda    15 年前

    我不完全确定你想用混合来做什么,但是你可以研究alpha混合 http://en.wikipedia.org/wiki/Alpha_compositing .