Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 50种灰色_C#_Colors_Hex - Fatal编程技术网

C# 50种灰色

C# 50种灰色,c#,colors,hex,C#,Colors,Hex,我想根据一个数字间隔和间隔计数中的一个位置(索引),得到不同的灰色阴影 所以函数应该是这样的: public static string GetShade(string StartColour, string EndColour, int Intervals, int Index) { ... } 因此,它将返回: GetShade("#aaaaaa", "#eeeeee", 5, 2) = "#bbbbbb" GetShade("#333333", "#555555", 3, 3) =

我想根据一个数字
间隔
和间隔计数中的一个位置(
索引
),得到不同的灰色阴影

所以函数应该是这样的:

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和255之间的数字的十六进制表示

您需要做的就是:

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

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

好吧,关于您迄今为止尝试的内容,您没有提到太多,因此我猜您在一开始就被卡住了

我可能会这样做:

  • 将起始颜色和结束颜色分解为三个组成部分,作为字符串中的数字(不能用字符串计算)
  • 通过划分时间间隔(开始,结束)并选择正确的分割(简单的算术,应该是类似于开始+(结束)的东西,找出所需的答案− 开始)÷间隔·索引)
  • 重新组装颜色字符串。注意允许前导零,即使用类似
    string.Format(“{0:X2}{1:X2}{2:X2}”,r,g,b)

  • 需要一些特殊字符串表示的事实应该放在函数之外。处理颜色是一项任务。在字符串之间设置颜色格式是另一项任务,应该由另一个函数处理

    详细阐述的基本数学如下:

          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、G和B三个分量,计算差值,除以间隔,然后将结果<代码>索引时间添加到起始值。你所有的灰色阴影都是以#ababab的形式还是以任何形式?HSL将是一个更好的模式,获得灰色的一个很好的点;但让我们指出,对于“纯”灰度图像,这是不需要的,其中R、G和B是相等的。但是,深褐色或其他色调…标题需要它。。有时它们只是问题的一部分..抱歉,看到其他注释应该是:return string.format(“{0:X2}{0:X2}{0:X2}”,shade);由于它的灰色R,B和B将是相同的值谢谢-这是我所需要的。我将颜色作为字符串存储在DB中,但在使用此函数之前,我将转换为颜色,因此它更易于重用。我不知道为什么间隔和索引是字节?这是因为R/G/B值是字节,所以对于完美灰色(R=G=B),只有255种可能的阴影。拥有超过255个区间没有多大意义,拥有比区间更多的索引也有意义:)