【问题标题】:50 shades of grey50级灰度
【发布时间】:2013-03-17 06:20:26
【问题描述】:

我想根据数字 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"

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

任何指针?

【问题讨论】:

  • 自己试一试:将颜色分成 R、G 和 B 分量,计算差值,除以区间并将结果 index 次添加到起始值。
  • 您所有的灰色阴影都是#ababab 形式,还是可以是任何形式? HSL 将是获得灰色的更好模型。
  • @marabutt 好点;但让我们指出,这对于“纯”灰度图像是不需要的,其中 R、G 和 B 相等。然而,棕褐色或其他色调需要它......
  • Titles.. 有时它们只是问题的一部分..

标签: c# colors hex


【解决方案1】:

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

您需要做的就是:

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

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

【讨论】:

  • 抱歉,看到其他 cmets 应该是:return string.format("{0:X2}{0:X2}{0:X2}", shade);
【解决方案2】:

嗯,到目前为止,你没有提到很多关于你尝试了什么,所以我猜你一开始就被卡住了。

我可能会这样处理:

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

【讨论】:

    【解决方案3】:

    你需要一些特殊的字符串表示应该放在你的函数之外。处理颜色是一项任务。将颜色格式化为字符串或从字符串格式化是另一项任务,应由另一个函数处理。

    详细说明的基本数学如下:

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

    【讨论】:

    • 因为它的灰色 R,B 和 B 将是相同的值
    • 谢谢 - 这正是我所需要的。我将颜色作为字符串存储在数据库中,但在使用此函数之前我会转换为颜色,因此它更可重用。我不确定为什么间隔和索引是字节?我会玩弄那个。
    • 这是因为 R/G/B 值是字节,所以对于完美的灰色 (R=G=B) 只有 255 种可能的阴影。拥有超过 255 个间隔并没有多大意义,并且拥有比间隔更多的索引也有意义:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多