Заменить цвета на изображении без необходимости перебирать все пиксели - PullRequest
0 голосов
/ 10 июня 2018

Допустим, у меня есть изображение, подобное этому (на самом деле у меня их много, но давайте будем простыми) пример изображения и я бы хотел заменить цвет фона (этотот, который не дорог) с зеленым цветом.

Для этого мне нужно будет перебрать все пиксели на карте и заменить те, которые соответствуют цвету, который я хочу удалить.

Но, как вы можете подумать, мое изображение не такое простое, как картинка 256x256, но оно немного больше, оно составляет 1440 пикселей, и падение производительности значительно.

Как бы я заменил все ненужные пиксели, не просматривая всепикселей.

Я работаю с 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 голосов
/ 10 июня 2018

Решено с этим:

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)
...