Processing 处理中如何转换颜色数据

Processing 处理中如何转换颜色数据,processing,Processing,我的目标是从输入图像中提取每个像素,根据其值对每个像素进行排序,然后根据排序后的像素值数组输出原始图像的重组版本。我相当确定我需要使用hex函数来格式化颜色数据,以便处理可以再次解释它,但是我没有得到期望的结果。实际上,当我运行草图时,我只得到一个全黑像素阵列 尺寸150150; PImage myImage=loadImageimage.jpg; imagemyImage,0,0; int[]颜色=新int[22500]; 加载像素; 对于int i=0;i

我的目标是从输入图像中提取每个像素,根据其值对每个像素进行排序,然后根据排序后的像素值数组输出原始图像的重组版本。我相当确定我需要使用hex函数来格式化颜色数据,以便处理可以再次解释它,但是我没有得到期望的结果。实际上,当我运行草图时,我只得到一个全黑像素阵列

尺寸150150; PImage myImage=loadImageimage.jpg; imagemyImage,0,0; int[]颜色=新int[22500]; 加载像素; 对于int i=0;i<22500;i++{ 颜色[i]=像素[i]; } 更新像素; int x=1; int y=1; 颜色=分类颜色; 对于int i=0;i<22500;i++{ 颜色c=颜色[i]; fillc; rectx,y,1,1; x=x+1; 如果x>width-3{ x=1; y=y+1; } }
我觉得你把事情复杂化了一点。。。你可以这样做这是整个草图:

PImage myImage = loadImage("image.jpg");
size(myImage.width*2, myImage.height);
myImage.loadPixels();
image(myImage, 0, 0);
myImage.pixels = sort(myImage.pixels);
myImage.updatePixels();
image(myImage, myImage.width, 0);
我有一种感觉,虽然结果将不完全是你所期望的。。。如果您想要在颜色之间平滑过渡,则排序功能将不起作用,因为颜色不是那样存储的。快速解释: 每个像素的颜色都是三种颜色的组合——红、绿、蓝——让我们暂时保持透明。因此,带有典型颜色选择器的橙色是255R 204G 0B。这三个值相邻附加以存储最终颜色。如果将它们转换为十六进制,则更容易理解:FFR CCG 00B。十六进制的最终值如下所示:FFCC00。如果您再次将其转换为十进制,以便可以存储它,则会得到16763904,这就是pixels[]数组填充的内容。如果您在尝试进行排序时对pixels[]数组进行排序,您得到的基本上是一个如下排序的数组:

 R   G   B
000 000 000
000 000 001 // a bit blue but almost black
000 000 002 // getting bluer
.
.
.
000 000 255 // all blue
000 001 000 // a bit green but almost black
000 001 001 // a bit green and a bit blue
.
.
.
000 255 000 // all green
000 255 001 // all green and a bit blue (going to cyan)
.
.
.
000 255 255 // cyan
001 000 000 // a bit red but almost black
001 001 000 // a bit red and a bit green
.
.
.
255 000 000 // all red
.
.
.
255 255 000 // yellow
.
.
.
255 255 255 // white
对大部分为黑色+青色图像的最终效果:


我觉得你把事情复杂化了一点。。。你可以这样做这是整个草图:

PImage myImage = loadImage("image.jpg");
size(myImage.width*2, myImage.height);
myImage.loadPixels();
image(myImage, 0, 0);
myImage.pixels = sort(myImage.pixels);
myImage.updatePixels();
image(myImage, myImage.width, 0);
我有一种感觉,虽然结果将不完全是你所期望的。。。如果您想要在颜色之间平滑过渡,则排序功能将不起作用,因为颜色不是那样存储的。快速解释: 每个像素的颜色都是三种颜色的组合——红、绿、蓝——让我们暂时保持透明。因此,带有典型颜色选择器的橙色是255R 204G 0B。这三个值相邻附加以存储最终颜色。如果将它们转换为十六进制,则更容易理解:FFR CCG 00B。十六进制的最终值如下所示:FFCC00。如果您再次将其转换为十进制,以便可以存储它,则会得到16763904,这就是pixels[]数组填充的内容。如果您在尝试进行排序时对pixels[]数组进行排序,您得到的基本上是一个如下排序的数组:

 R   G   B
000 000 000
000 000 001 // a bit blue but almost black
000 000 002 // getting bluer
.
.
.
000 000 255 // all blue
000 001 000 // a bit green but almost black
000 001 001 // a bit green and a bit blue
.
.
.
000 255 000 // all green
000 255 001 // all green and a bit blue (going to cyan)
.
.
.
000 255 255 // cyan
001 000 000 // a bit red but almost black
001 001 000 // a bit red and a bit green
.
.
.
255 000 000 // all red
.
.
.
255 255 000 // yellow
.
.
.
255 255 255 // white
对大部分为黑色+青色图像的最终效果:

你的素描少了一个鼻孔。您需要将其添加到绘制第1面矩形的for循环之前的某个位置,否则黑色矩形的边框将填充整个草图

或者,替换

  fill(c);
  rect(x, y, 1, 1);

也可以使用点而不是矩形,但需要添加noSmooth

为了好玩,这里有一张蒙德里安的照片,和你的剧本一起排序

未排序:已排序:

如果您正在寻找其他颜色排序方法,您可以编写自己的方法或使用可用的库,例如。

您的草图缺少一个鼻孔。您需要将其添加到绘制第1面矩形的for循环之前的某个位置,否则黑色矩形的边框将填充整个草图

或者,替换

  fill(c);
  rect(x, y, 1, 1);

也可以使用点而不是矩形,但需要添加noSmooth

为了好玩,这里有一张蒙德里安的照片,和你的剧本一起排序

未排序:已排序:

如果您正在寻找其他排序颜色的方法,您可以编写自己的方法或使用可用的库,例如