这是我的情况。我正在使用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)
表示法工作正常。但是,我仍然想知道是什么打破了十六进制版本,所以我会把这个问题打开。
答案 0 :(得分:3)
color()不接受十六进制值。它需要0到255之间的简单int值。尝试使用十六进制值打印出其中一个color()调用的值,然后你会得到一些疯狂的负值。
送入color()方法的任何负值都将被解释为0,等于黑色。如果您想看到它的影响,请在处理中尝试。
就像你想的那样,使用颜色(r,g,b)分别使用0到255之间的值来表示r,g,b。