3

我想根据该间隔计数中的数字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"

(显然,如果我的开始和结束是灰色的,它只会与灰色有关)。

任何指针?

4

3 回答 3

2

好吧,到目前为止,您并没有提及很多关于您尝试的内容,所以我猜您一开始就被卡住了。

我可能会这样处理:

  1. 将开始和结束颜色分解为字符串中的数字作为它们的三个组成部分(你不能真正用字符串计算)
  2. 通过划分间隔(开始结束)并选择正确的分割来找出所需的答案(简单的算术,应该类似于开始+(结束-开始)÷间隔·索引
  3. 重新组装颜色字符串。注意允许前导零,即使用类似string.Format("{0:X2}{1:X2}{2:X2}", r, g, b).
于 2013-03-27T08:20:27.360 回答
2

颜色的每个组成部分都是 0 到 255 之间数字的十六进制表示。

您需要做的就是:

int shade = 255/Intervals * index;
return string.format("{0:X}{0:X}{0:X}", shade);

以上可能存在一些舍入类型的问题,但以上是所需的一般概念。

于 2013-03-27T08:18:42.423 回答
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 };
      }
于 2013-03-27T08:29:05.600 回答