我试图通过迭代所有可能的颜色组合并将每个值添加到list
来创建简单的颜色渐变位图。每个RGB
个值都存储为主int
中的list
数组。
当我尝试add
数组到list
时,会出现问题。它会覆盖list
中的所有先前条目,最后我得到一个充满颜色数组的列表,所有颜色数组都填充了255.我知道必须存在一种更好的方法来创建一个色谱位图而不是笨重的方式,但我对它为什么会这样表现很感兴趣。
int[] temp = new int[3];
for (int r = 0; r < 256; r++)
{
for (int g = 0; g < 256; g++)
{
for (int b = 0; b < 256; b++)
{
temp[0] = r;
temp[1] = g;
temp[2] = b;
colors.Add(temp);
}
}
}
答案 0 :(得分:4)
你的问题是temp是一个数组,数组是引用类型。当您对其进行更改时,它会反映在以前添加的颜色值中。
你需要做
for (int r = 0; r < 256; r++)
{
for (int g = 0; g < 256; g++)
{
for (int b = 0; b < 256; b++)
{
int[] temp = new int[3];
temp[0] = r;
temp[1] = g;
temp[2] = b;
colors.Add(temp);
}
}
}
这样每个temp
都是一个全新的实例,colors
的所有值都会不同。
答案 1 :(得分:2)
用户NikhilAgrawal的回答是正确的,我建议您在Color
命名空间中使用专用的System.Drawing
结构。结果得到many useful methods and operators for free。
您的代码变为:
List<Color> colors = new List<Color>();
for (int r = 0; r < 256; r++)
{
for (int g = 0; g < 256; g++)
{
for (int b = 0; b < 256; b++)
{
colors.Add(Color.FromArgb(r,g,b));
}
}
}