替换图像中的颜色,而不必遍历所有像素

时间:2018-06-10 14:30:34

标签: java android image iteration processing

让我们说我有一个像这样的图像(实际上,我有很多,但让我们保持简单) example picture并且我想用绿色替换背景颜色(那些不是道路的颜色)。

要做到这一点,我必须遍历地图中的所有像素,并替换与我想要删除的颜色相匹配的像素。

但是你可能会认为,我的图像并不像256x256图片那么简单,但它的图像略大,它的1440p,性能下降很明显。

如何在不迭代所有像素的情况下替换所有不需要的像素。

我正在使用Processing 3 - Java(Android),我目前正在使用这段代码:

for (x = 0; x < img.width; x++){
    for (int y = 0; y < img.height; y++) {
         //Color to transparent
         int index = x + img.width * y;
         if (img.pixels[index] == -1382175 || img.pixels[index] == 14605278 || img.pixels[index] == 16250871) {
            img.pixels[index] = color(0, 0, 0, 0);
         } else {
            img.pixels[index] = color(map(bright, 0, 255, 64, 192));
         }
    }
}

1 个答案:

答案 0 :(得分:0)

解决这个问题:

private PImage swapPixelColor(PImage img, int old, int now) {
    old &= ~0x00000000;
    now &= ~0x00000000;

    img.loadPixels();
    int p[] = img.pixels, i = p.length;

    while (i-- != 0) if ((p[i]) == old) p[i] = now;

    img.updatePixels();
    return img;
}

它就像一个魅力,几乎没有时间:

Swapped colors in 140ms // That's replacing it three times(different colors ofc)