在c#中添加和划分颜色

本文关键字:划分 颜色 添加 | 更新日期: 2023-09-27 18:08:49

我想从两种颜色中生成一个中间色:

Color Middle = Color.FromRGB(Color.FromRgb( Color1.R + Color2.R) / 2, (Color1.G + Color2.G) / 2, (Color1.B + Color2.B) / (2);

这段代码无法编译,因为FromRGB()需要byte

所以我试了这个:

Color myColorMiddle = Color.FromRgb((byte)(Color1.R + Color2.R) / (byte)2, (byte)(Color1.G + Color2.G) / (byte)2, (byte)(Color1.B + Color2.B) / (byte)2);

但是我得到了相同的错误。有人能帮帮我吗?

在c#中添加和划分颜色

对byte(和short)进行算术运算产生int类型的结果。你必须把整个表达式放在括号里并强制转换:

Color myColorMiddle = Color.FromRgb((byte)((Color1.R + Color2.R) / 2), (byte)((Color1.G + Color2.G) / 2), (byte)((Color1.B + Color2.B) / 2));

如果你把它提取到一个函数中,你的代码会更清晰:

byte Average(byte a, byte b)
{
    return (byte)((a + b) / 2);
}

那么你的代码看起来像这样:

Color myColorMiddle = Color.FromRgb(Average(Color1.R, Color2.R), Average(Color1.G, Color2.G), Average(Color1.B, Color2.B));

如果您使用的是System.Windows.Media。颜色,我认为你可以这样做:

  Color start = Color.FromRgb(255, 0, 0);
  Color end = Color.FromRgb(0, 255, 0);
  Color middle = start + (end - start) * 0.5F;

注意,我没有尝试这个,但我确实从MSDN:

http://msdn.microsoft.com/en-us/library/system.windows.media.color.aspx

更新

我已经测试了我最近的编辑,它确实工作。