我试图绘制一个形状(使用rect()),我想处理形状中的每个像素,并改变每个像素的颜色。 我想我不能使用fill()因为它只用一种颜色填充形状。 我能做什么? 感谢。
答案 0 :(得分:0)
我认为你要找的是pixels array和set()
与之相关的功能。
像素数组存储草图中每个像素的颜色:
包含显示窗口中所有像素值的数组。这些值是颜色数据类型。此数组是显示窗口的大小。例如,如果图像为100x100像素,则将有10000个值,如果窗口为200x300像素,则将有60000个像素。
但是,您需要在访问此数组之前调用loadPixels()
,否则可能会产生NullPointerException
。
对于这种特殊情况,您不需要访问该数组,但我认为在此处提及它会很有用。
现在,来解决方案。加载像素后,可以使用set(x, y, c)
方法设置像素的颜色值。该方法有3个参数:
x和y参数指定要更改的像素,c参数指定颜色值。根据当前颜色模式解释c参数。 (默认颜色模式是从0到255的RGB值。)
因此,如果您知道左上角坐标和rect
的尺寸,则可以使用嵌套的for
循环迭代矩形的每个像素,并使用{设置该像素的颜色{1}}
示例草图看起来像这样:
set(x, y, c)
请注意,在这种情况下,您可以在不调用int x, y;
int length, breadth;
void setup() {
size(400, 400);
x = 100;
y = 50;
length = 80;
breadth = 60;
}
void draw() {
background(51);
rect(x, y, length, breadth);
loadPixels();
for (int i=x; i<x+length; i++) {
for (int j=y; j<y+breadth; j++) {
set(i, j, color(random(255), random(255), random(255)));
}
}
}
的情况下离开,因为您实际上从未真正访问像素数组的元素。
答案 1 :(得分:0)
rect()
函数是绘制简单矩形的简便方法。您所描述的并不是那么简单,因此您无法使用rect()
函数来执行此操作。
相反,您可以使用嵌套的for
循环迭代要更改的像素,然后调用stroke()
设置颜色,然后point()
绘制一个点。为您要填写的每个像素执行此操作。您可能还需要先调用noSmooth()
以避免绘制半透明点。
可以在the reference找到更多信息。