如何为每个像素填充不同颜色的形状?

时间:2017-05-16 16:59:46

标签: processing

我试图绘制一个形状(使用rect()),我想处理形状中的每个像素,并改变每个像素的颜色。 我想我不能使用fill()因为它只用一种颜色填充形状。 我能做什么? 感谢。

2 个答案:

答案 0 :(得分:0)

我认为你要找的是pixels arrayset()与之相关的功能。

像素数组存储草图中每个像素的颜色:

  

包含显示窗口中所有像素值的数组。这些值是颜色数据类型。此数组是显示窗口的大小。例如,如果图像为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找到更多信息。