C# 在C中添加和划分颜色#

C# 在C中添加和划分颜色#,c#,wpf,xaml,math,colors,C#,Wpf,Xaml,Math,Colors,我想从两种颜色生成中间颜色: Color Middle = Color.FromRGB(Color.FromRgb( Color1.R + Color2.R) / 2, (Color1.G + Color2.G) / 2, (Color1.B + Color2.B) / (2); 此代码无法编译,因为FromRGB()需要字节 所以我试了一下: Color myColorMiddle = Color.FromRgb((byte)(Color1.R + Color2.R) / (byte)2,

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

Color Middle = Color.FromRGB(Color.FromRgb( Color1.R + Color2.R) / 2, (Color1.G + Color2.G) / 2, (Color1.B + Color2.B) / (2);
此代码无法编译,因为
FromRGB()
需要
字节

所以我试了一下:

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);

但我也犯了同样的错误。有人能帮我吗?

对字节(和短)进行算术运算,得到整数结果。您必须将整个表达式放在括号中并强制转换:

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,我认为您可以这样做:

  Color start = Color.FromRgb(255, 0, 0);
  Color end = Color.FromRgb(0, 255, 0);
  Color middle = start + (end - start) * 0.5F;
注意,我没有尝试过这个,但我确实从MSDN获得了它:

更新


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

+1,每天学习新的东西。我为您添加了一些缺少的括号。