Tratar con relleno en un archivo BMP en C

Estoy tratando de editar un archivo BMP en C. Mi código funciona para archivos BMP sin relleno, pero tengo problemas para lidiar con el relleno.

Hay algunas otras preguntas sobre archivos BMP que he leído, pero la mayoría de ellas usan otros lenguajes como C # y Java, por lo que no las encontré muy útiles.

Así es como se ve la matriz de píxeles, pero mucho más grande:

char bmpArray[MAX] = {B,G,R,B,G,R,B,G,R,0,0,0,
                      B,G,R,B,G,R,B,G,R,0,0,0,
                      B,G,R,B,G,R,B,G,R,0,0,0}

Los ceros son para rellenar bytes para hacer que cada fila sea divisible por 4, depende del ancho de píxel de la imagen. Lo que estoy tratando de hacer es dejar estos bytes de relleno como están en la misma posición y solo lidiar con los bytes B, G, R. Si aplico ediciones a los valores de relleno, la imagen resultante se distorsionará.

Hice una función que genera la cantidad de bytes de relleno en función del ancho. Utiliza esta fórmula4 - ((width * 3) % 4) y funciona como lo probé con imágenes con diferente ancho.

Extraje con éxito los datos B, G, R del archivo BMP y los puse en una matriz para que solo publique la parte del código con la que tengo problemas.

int c = 0;
for (int a = 0; a < height; a++) {
    for (int b = 0; b < width*3; b++) {
        if (bmpArray[a*(width*3)+b] < 127) {
            bmpArray[a*(width*3)+b] = 0;
        } else {
            bmpArray[a*(width*3)+b] = 255;
        }
        c++;
    }
    for (int pad = 0; pad < padding; pad++) {
        bmpArray[c++] = 0x00;
    }
}

Lo que estoy tratando de hacer es "dibujar" cada fila del archivo BMP de salida y luego detenerme tan pronto como llegue al final de la fila, es decir ancho * 3, y luego dibujar los bytes de relleno antes de pasar a la siguiente fila de píxeles

Alternativamente, ¿hay alguna forma de identificar los píxeles de relleno usando un solo bucle for y luego usar una instrucción if para no modificar los píxeles de relleno? Por ejemplo:

for (int a = 0; a < bmpArraySize; a++) {
    paddingBytes = ??? //for example for the first row
                       // paddingBytes are i + width*3 + 1
                       // and i + width*3 + 2 and i + width*3 + 3 if padding = 3
    if (a = paddingBytes) {
        bmpArray[a] = 0x00;
    }
    else if (bmpArray[a] < 127) {
        bmpArray[a] = 0;
    }
    else {
        bmpArray[a] = 255;
    }
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta