从一组数组中选择颜色只会返回黑色?

时间:2013-06-29 18:32:07

标签: arrays random colors processing

这是我的情况。我正在使用Processing 2.0,而我正试图将一个正方形网格转成45度角。每个正方形将填充从五个调色板中随机选择的颜色。我的问题是这个;出于某种原因,当我使用COLORS[int(random(COLORS.length))]从我的调色板中获取颜色时,我只会变黑!这有点奇怪,因为黑色不是我调色板中的颜色之一!我已经测试了我的floodFill()函数,我可以确认它是有效的,因为使用从数组中拉出的单个颜色而不是的测试可以正常工作。有小费吗?我的代码如下:

final int DX = 16, DY = DX;
final color DEFAULT_BG = color(50, 50, 50);
final color[] COLORS = {
  color(#ff3333),
  color(#4fff55),
  color(#585eff),
  color(#ebff55),
  color(#FF55D5),
};

void setup() {
  size(800, 480);
  background(DEFAULT_BG);
  noSmooth();
  for (int x = 0; x < width; x += DX) {
    for (int y = 0; y < height; y += DY) {
      line(x, y, x + 16, y + 16);
      line(x + 16, y, x, y + 16);
    }
  }

  for (int x = 0; x < width; x += 4) {
    for (int y = 0; y < height; y += 4) {
      if (get(x, y) == DEFAULT_BG) {
        color f = COLORS[int(random(COLORS.length))];
        floodFill(x, y, DEFAULT_BG, color(f));
      }
    }
  }
}

void floodFill(final int x, final int y, final color from, final color to) {
  if (!(x < 0 || y < 0 || x >= width || y >= height || from == to || get(x, y) != from)) {
    set(x, y, to);
    floodFill(x, y + 1, from, to);
    floodFill(x, y - 1, from, to);
    floodFill(x + 1, y, from, to);
    floodFill(x - 1, y, from, to);
  }
}

当我用#rrggbb替换0xrrggbb符号时,我会变白。当我用0xrrggbbaa替换它时,我得到黑白(不是灰度)。

现在使用标准color(r, g, b)表示法工作正常。但是,我仍然想知道是什么打破了十六进制版本,所以我会把这个问题打开。

1 个答案:

答案 0 :(得分:3)

color()不接受十六进制值。它需要0到255之间的简单int值。尝试使用十六进制值打印出其中一个color()调用的值,然后你会得到一些疯狂的负值。

送入color()方法的任何负值都将被解释为0,等于黑色。如果您想看到它的影响,请在处理中尝试。

就像你想的那样,使用颜色(r,g,b)分别使用0到255之间的值来表示r,g,b。