in libs/screen/image.cpp [586:614]
void replace(Image_ img, int from, int to) {
if (img->bpp() != 4)
return;
to &= 0xf;
if (from == to)
return;
img->makeWritable();
// avoid bleeding 'to' color into the overflow areas of the picture
if (from == 0 && img->hasPadding()) {
for (int i = 0; i < img->height(); ++i)
for (int j = 0; j < img->width(); ++j)
if (getCore(img, j, i) == from)
setCore(img, j, i, to);
return;
}
auto ptr = img->pix();
auto len = img->pixLength();
while (len--) {
auto b = *ptr;
if ((b & 0xf) == from)
b = (b & 0xf0) | to;
if ((b >> 4) == from)
b = (to << 4) | (b & 0xf);
*ptr++ = b;
}
}