我该怎么做?转换RGB方法?
int blue = Color.Blue.ToArgb();
int yellow = Color.Yellow.ToArgb();
blue = (blue + yellow)/2;
Color Blue = ConvertFromRGB(blue);
我该怎么做?转换RGB方法?
int blue = Color.Blue.ToArgb();
int yellow = Color.Yellow.ToArgb();
blue = (blue + yellow)/2;
Color Blue = ConvertFromRGB(blue);
我想你要找的东西是这样的:
var blueColor = Color.FromArgb((blue + yellow)/2);
不过,我不认为这会给你你真正想要的结果。
您必须非常小心以这种方式混合颜色。就编码器而言,表示ARGB格式的颜色的值是相当任意的。这也可能是最好的RGB分量单独混合,如:
var color1 = Color.Blue;
var color2 = Color.Yellow;
var blueColor = Color.FromArgb((color1.R + color2.R)/2,
(color1.G + color2.G)/2, (color1.B + color2.B)/2);
两种颜色之间的插值(以中心点),并应给你的东西,看起来更像是两种颜色的混合。
(请注意,我假设你指的是System.Drawing.Color
类型在这里。)
+1对于颜色混合的明确解释 – CodeLikeBeaker 2009-06-11 13:20:18
我觉得这是你可能会寻找:
int blue = Color.Blue.ToArgb();
int yellow = Color.Yellow.ToArgb();
blue = (blue + yellow)/2;
Color Blue = Color.FromArgb(blue);
只是平均的颜色组件的方式,如果那是你正在尝试做的:
这将是有益的知道你从第二分配期待“蓝色”是什么 - 你肯定不会得到的阴影蓝色(更像红色)。
问题是Color类将ARGB值保留为Int32,因为每个4字节表示Alpha,Red,Blue和Green值之一。
问到加在一起的两种颜色在他们的Int32形式将会导致意外的值,如一个字节的“溢出”到下一个(当您添加255和1会发生什么?)
Color.Blue,为例如,是-16776961。这是因为它有4个字节是这个样子:
0: 255
1: 0
2: 0
3: 255
或者:
11111111 00000000 00000000 11111111
你会发现它更清楚打破ARGB成分分解成单个字节的System.Drawing.Color允许您可以通过它的实例属性做到这一点:
blue.A
blue.R
blue.G
blue.B
您可以安全地处理这些,但要记住,他们是字节的一个实例,所以你不能分配一个值超出范围0-255的。若要从组件字节的颜色,使用方法:
Color.FromArgb(a, r, g, b);
凡a, r, g, b
是字节。
有点混淆,Color.FromArgb接受int参数,而不是字节。恐怕我不知道为什么,比我更好的人将不得不回答这个问题,而是将一个字节转换为一个int,并产生一个介于0和255之间的int值,因此使用这个值是安全的。Color也有一个私有的CheckByte类,它传递每个参数,所以你会得到一个ArgumentException,而不是一个意想不到的颜色(你可能会用非组件方法得到)。
这是Noldorin和Jason Heine之间的心理调试摊牌。谁会赢?不要离开你的座位 – 2009-06-11 13:01:22
哈哈。是的,OP的目标并不完全清楚,但我正尽我所能地设想。 – Noldorin 2009-06-11 13:07:43
:)完全同意,今天早上醒来的方法是什么! – CodeLikeBeaker 2009-06-11 13:08:57