C#如何循环遍历颜色?

3
在我的程序中,我需要按顺序循环使用已知的用户颜色,以使其看起来平滑和自然,就像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的间隔处会变黑,然后继续。

这个对我有用吗?我尝试过了,但是不行。

有什么想法吗?


2
你的代码让我眼睛流血。 - DotNetRussell
2
顺便提一下,Color.ToArgb()与上面的ColorToBgra()方法执行的是相同的操作。 - Matthew Watson
1
你应该让我们知道 DWM 颜色滑块 的外观,这样我们就可以尝试另一种方法。 - King King
这里是所有的代码 :) https://dev59.com/C3TYa4cB1Zd3GeqPysYy#17808712 - Trontor
@MatthewWatson 但它是否返回一个无符号整数? :) - Trontor
显示剩余2条评论
1个回答

2
这可能会帮助你找到正确的方向?
// 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);
}

我是一个编程新手,不知道如何将此实现到我的程序中,请帮忙吗? - Trontor
1
我已经编辑了我的回答,使其适用于System.Drawing.Color而不是XNA的Color。 - Codecat
这个算法基于什么?如果我想让最大的w为200怎么办? - Mike Tsayper
这个算法是基于什么的?如果我想让最大的w为200怎么办? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接