【问题标题】:C# Looping through Colors?C#循环颜色?
【发布时间】:2013-08-05 11:37:48
【问题描述】:

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

颜色也必须转换为 uint

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

然后设置它。我尝试将其设置为白色,其中 uint 为 0,然后每 0.1 秒添加一次 +1,但它并不平滑,并且每隔大约 uint 250 它会变黑然后继续。 this 对我有用吗?我试过了,但没有。

有什么想法吗?

【问题讨论】:

  • 你的代码让我流血了。
  • 顺便说一句,Color.ToArgb() 与上面的 ColorToBgra() 方法相同。
  • 你在哪里找到这个代码?我认为Blue 颜色应该从color.B 右移。据我所知,颜色元素的顺序是B G R A 而不是A R G B 很多人认为的。
  • 您应该让我们知道DWM color slider 的外观,以便我们有其他方法。
  • 这里是所有代码的位置:) stackoverflow.com/a/17808712/2609115

标签: c# winforms loops colors


【解决方案1】:

这可能会把你推向正确的方向吗?

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

【讨论】:

  • 我对编程很陌生,我不知道如何在我的程序中实现它,有什么帮助吗?
  • 我已经编辑了我的答案,因此它适用于 System.Drawing.Color 而不是 XNA 的 Color。
猜你喜欢
  • 2017-11-30
  • 1970-01-01
  • 2011-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多