Есть ли простой способ смешать два значения System.Drawing.Color?

Родитель, выступающий в качестве вашего фона, должен быть заменен на родного брата перед контейнером, в который обернуты ваши дети. Таким образом, вы можете установить прозрачность, не затрагивая всю иерархию.

Это будет выглядеть так.

  • <item-container>
    • <item-background>
    • <children-container>
      • <children/>

    Эта иерархия будет иметь тот же порядок видимости и позволит вам установить прозрачность независимо от содержимого дочернего контейнера.

17
задан Drew Noakes 28 October 2012 в 18:28
поделиться

2 ответа

Я написал вспомогательный метод именно для этой цели. :)

/// <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);
}
34
ответ дан 30 November 2019 в 11:12
поделиться

Я не совсем уверен, что вы пытаетесь сделать с помощью смешивания, но вы можете изучить альфа-смешивание http://en.wikipedia.org/wiki/Alpha_compositing .

3
ответ дан 30 November 2019 в 11:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: