我希望在该间隔计数中根据数字intervals
和位置(index
)获得不同的灰色阴影。
所以函数会是这样的:
public static string GetShade(string StartColour, string EndColour, int Intervals, int Index)
{ ... }
所以它会回来:
GetShade("#aaaaaa", "#eeeeee", 5, 2) = "#bbbbbb"
GetShade("#333333", "#555555", 3, 3) = "#555555"
(显然,如果我的开始和结束都是灰色的,它只与灰色相关。)
任何指针?
答案 0 :(得分:2)
颜色的每个组件都是十六进制表示,数字介于0到255之间。
您需要做的就是:
int shade = 255/Intervals * index;
return string.format("{0:X}{0:X}{0:X}", shade);
上面可能存在一些舍入式问题,但上面是需要的一般概念。
答案 1 :(得分:2)
嗯,你到目前为止没有提到很多关于你尝试过的事情,所以我猜你一开始就陷入困境。
我可能会按如下方式处理:
string.Format("{0:X2}{1:X2}{2:X2}", r, g, b)
。答案 2 :(得分:1)
您需要一些特殊字符串表示的事实应该放在您的函数之外。处理颜色是一项任务。格式化字符串的颜色是另一个任务,应该由另一个函数处理。
详细说明的基本数学是这样的:
public static Color GetShade(Color start, Color end, byte intervals, byte index)
{
var deltaR = end.R - start.R;
var deltaG = end.G - start.G;
var deltaB = end.B - start.B;
var intervalR = deltaR / intervals;
var intervalG = deltaG / intervals;
var intervalB = deltaB / intervals;
var finalR = start.R + (index * intervalR);
var finalG = start.G + (index * intervalG);
var finalB = start.B + (index * intervalB);
return new Color { R = (byte)finalR, G = (byte)finalG, B = (byte)finalB };
}