处理2.0中未在图片中加载白色像素



这是用于编程语言Processing(2.0)的。

假设我希望加载一个非正方形的图像(让我们使用一个绿色圆圈作为示例)。如果我把它放在黑色背景上,你可以明显地看到图像的白色正方形(也就是图像中不是绿色圆圈的所有部分)。我该如何有效地去除它们?

它想不出一种有效的方法来做到这一点,我将对数百张照片进行每秒25次的处理(因为它们会移动)。

任何帮助都将不胜感激,代码的效率越高越好。

正如@user3342987所说,您可以循环浏览图像的像素,看看每个像素是否为白色。然而,值得注意的是,255是白色的(而不是0,它是黑色的)。你也不应该像他们建议的那样对替换颜色进行硬编码——如果图像在条纹背景上移动怎么办?最好的方法是使用图像的alpha通道将所有白色像素更改为透明像素。此外,既然你提到你将"每秒大约做25次",你就不应该做这些检查不止一次——每次都是一样的,而且会很浪费。相反,当图像第一次加载时就这样做,就像这样(未经测试):

PImage[] images;
void setup(){
size(400,400);
images = new PImage[10];
for(int i = 0; i < images.length; i++){
// example filenames
PImage img = loadImage("img" + i + ".jpg");
img.beginDraw();
img.loadPixels();
for(int p = 0; p < img.pixels.length; p++){
//color(255,255,255) is white
if(img.pixels[p] == color(255,255,255)){
img.pixels[p] = color(0,0); // set it to transparent (first number is meaningless)
}
}
img.updatePixels();
img.endDraw();
images[i] = img;
}
}
void draw(){
//draw the images as normal, the white pixels are now transparent
}

因此,这将导致draw()期间没有延迟,因为您编辑掉了setup()中的白色像素。无论你在画什么,上面的图像都会显示出来。

还值得一提的是,一些图像文件类型内置了alpha通道(例如,PNG格式),因此您也可以在一些图像编辑器中将白色像素更改为透明,并将这些编辑后的文件用于草图。这样你的草图就不必每次启动都编辑它们了。

像素存储在Pixels[]数组中,您可以使用for循环来检查值是否为0(也称为白色)。如果是白色,则将其加载为黑色背景。

最新更新