日期:2014-05-17  浏览次数:21325 次

关于计算颜色的问题,请各位朋友帮忙
请问  可以根据 输入一个 int数值  返回一个颜色吗?

这个是可以实现的。 并且网上有很多代码。

但是 如果控制返回的颜色 都是比较暗的颜色呢?


其实就是白色背景上的 文字颜色  是随机显示的, 现在希望  这些文字的颜色 随着int的参数自动变化。并且尽量返回的都是 深色的颜色内容, 这样不论颜色怎么变化 都可以看清文字。 谢谢。

------解决方案--------------------
那你自己研究下rgb,哪些区域是深色的,当落到浅色区域时,按照一定规则“跳”到下一个深色区域。
------解决方案--------------------
0是黑色,intMax是白色
32位颜色含R G B三个通道,外加一个Alpha通道(透明度,这里不用管),每个通道用一个字节表示,也就是0~255
如果三个通道的值都差不多,比如为0x777777时就已经是灰色了,三个同时趋于零或者其中一个趋于255时颜色越深
先把你的int分解为4个字节,按照上述规律划出一个范围,应该是不连续的
------解决方案--------------------
BitConverter.GetBytes(0xFF0000)
------解决方案--------------------
你要对比不同颜色的RGB值,找出符合你需要的颜色的RGB值的范围,然后在取值时加个范围的约束条件就OK了!
------解决方案--------------------
一个int 值可以用来包括一个颜色信息,而且编码方式有很多种,如:ABGR,就是最常用的一种,每个字母用一个8Bit的字符来表示,转换成数值就是0-255。自己定义一种然后读写就行了。

// intSour 是源数据
int intRGB = intSour & (256*256*256);//把 A 去掉
int R,G,B;
R = intRGB % 256;//先提取最后一个字节
G = (intRGB - R) / 256 % 256;//去掉已提取的数再相除,这样就不会造成商的四舍五入
B = (intRGB - G * 256) / 65536;//原理同上一句


------解决方案--------------------
取得颜色,然后异或下。
int newColor = orgColor ^ backgroundColor;
------解决方案--------------------
引用:
取得颜色,然后异或下。
int newColor = orgColor ^ backgroundColor;

如果newColor很暗,那么结果会跟backgroundColor很接近。

以下方法“随机”产生一个比较暗的颜色(7F掩码使得各个颜色值不会大于127):
static Color GetDarkColor(int i)
{
    int hashed = unchecked((int)(i * 2654435761) & 0x007F7F7F);
    return ColorTranslator.FromWin32(hashed);
}