C#通过颜色循环?

C#通过颜色循环?,c#,winforms,loops,colors,C#,Winforms,Loops,Colors,在我的程序中,我需要循环使用已知的可用用户颜色,以使其看起来平滑自然,就像DWM颜色滑块一样 颜色也必须转换为uint private static uint ColorToBgra(Color { return (uint) (color.B | (color.G << 8) | (color.R << 16) | (color.A << 24)); } private static uint colortogra(颜色 { 返回(u

在我的程序中,我需要循环使用已知的可用用户颜色,以使其看起来平滑自然,就像DWM颜色滑块一样

颜色也必须转换为uint

private static uint ColorToBgra(Color     
{
   return (uint)
   (color.B | (color.G << 8) | (color.R << 16) | (color.A << 24));
}
private static uint colortogra(颜色
{
返回(uint)

(color.B |)(color.G这可能会把你推向正确的方向

// w goes from 0 to 100
private static Color spectrumColor(int w)
{
  float r = 0.0f;
  float g = 0.0f;
  float b = 0.0f;

  w = w % 100;

  if (w < 17) {
    r = -(w - 17.0f) / 17.0f;
    b = 1.0f;
  } else if (w < 33) {
    g = (w - 17.0f) / (33.0f - 17.0f);
    b = 1.0f;
  } else if (w < 50) {
    g = 1.0f;
    b = -(w - 50.0f) / (50.0f - 33.0f);
  } else if (w < 67) {
    r = (w - 50.0f) / (67.0f - 50.0f);
    g = 1.0f;
  } else if (w < 83) {
    r = 1.0f;
    g = -(w - 83.0f) / (83.0f - 67.0f);
  } else {
    r = 1.0f;
    b = (w - 83.0f) / (100.0f - 83.0f);
  }

  return Color.FromArgb((int)r * 255, (int)g * 255, (int)b * 255);
}
//w从0变为100
专用静态颜色光谱颜色(int w)
{
浮球r=0.0f;
浮球g=0.0f;
浮球b=0.0f;
w=w%100;
如果(w<17){
r=-(w-17.0f)/17.0f;
b=1.0f;
}否则,如果(w<33){
g=(w-17.0f)/(33.0f-17.0f);
b=1.0f;
}否则,如果(w<50){
g=1.0f;
b=-(w-50.0f)/(50.0f-33.0f);
}否则如果(w<67){
r=(w-50.0f)/(67.0f-50.0f);
g=1.0f;
}否则如果(w<83){
r=1.0f;
g=-(w-83.0f)/(83.0f-67.0f);
}否则{
r=1.0f;
b=(w-83.0f)/(100.0f-83.0f);
}
返回颜色.FromArgb((int)r*255,(int)g*255,(int)b*255);
}

你的代码让我的眼睛流血。顺便说一句,
Color.ToArgb()
colortobra()的作用相同
方法。你在哪里找到这个代码的?我认为
蓝色的
颜色应该从
颜色.B
右移。据我所知,颜色元素的顺序是
bGrA
而不是很多人认为的
aRgB
。你应该让我们知道
DWM颜色滑块的外观,这样我们可能会有另一个ap方法。这里是所有代码的地方:)我对编程非常陌生,我不知道如何在我的程序中实现这一点,有什么帮助吗?我已经编辑了我的答案,使其与System.Drawing.Color而不是XNA的Color一起工作。