C не имеет "методов" ... И нет, это не похоже на то, для чего есть стандартная библиотека. Я думаю, вам нужно кодировать его самостоятельно, используя что-то вроде этого:
void setAlpha(unsigned char *rgba, int width, int height, int alpha)
{
int x, y;
for(y = 0; y < height; y++)
{
for(x = 0; x < width; x++, rgba += 4)
{
rgba[3] = (unsigned char) alpha;
}
}
}
Основные предположения:
- Порядок упаковки RGBA в памяти, то есть смещение составляет 3 от альфа-байта от начала пикселя.
- Изображение сохраняется с верхним левым пикселем по начальному адресу, справа налево, сверху вниз.
- Там нет отступов или что-то еще
Также обратите внимание на порядок циклов; это может иметь огромное значение для реальной производительности из-за кэширования. Этот код касается пикселей, которые расположены в памяти последовательно по порядку, что называется «хорошая локальность».
Изменение указателя так, чтобы он указывал на следующий пиксель, а не указывал адрес (rgba[4 * y * width + 4 * x + 3]
), также является оптимизацией, и (для меня) достаточно простым для понимания.