Cómo cambiar el tamaño de un bitmap

// determine padding for scanlines int padding = (4 - (bi.biWidth * sizeof(RGBTRIPLE)) % 4) % 4; // iterate over infile's scanlines for (int i = 0, biHeight = abs(bi.biHeight); i < biHeight; i++) { for(int q = 0; q < n; q++) { // iterate over pixels in scanline for (int j = 0; j < bi.biWidth; j++) { // temporary storage RGBTRIPLE triple; // read RGB triple from infile fread(&triple, sizeof(RGBTRIPLE), 1, inptr); // write RGB triple to outfile for (int r = 0; r < n; r++) fwrite(&triple, sizeof(RGBTRIPLE), 1, outptr); } // skip over padding, if any fseek(inptr, padding, SEEK_CUR); //then add it back (to demonstrate how) for (int k = 0; k < padding; k++) fputc(0x00, outptr); } } 

Estoy tratando de alterar el código para poder redimensionar un bmp por un factor de n (agregando n triples al ancho y al alto). He encontrado una forma de iterar un bucle for que cambiará el tamaño del ancho: for (int r = 0; r < n; r++) . Intenté hacer lo mismo con la altura y no puedo entender por qué no funciona. for (int q = 0; q < n; q++)

En el nivel de línea, después de una sola lectura de un píxel, n escribe sobre ella. Esto se hace agregando otro bucle interno. Ese píxel copiado reside en triple var durante la operación.

A nivel de archivo, debe procesar repetidamente una sola línea, leerla y escribirla varias veces.

Si su archivo de entrada está en el disco, debería admitir el rebobinado. Así que puede leer la línea, escribirla (duplicar los píxeles en el interior, como se muestra arriba), luego rebobinar el archivo al principio de la línea, leer la línea nuevamente, escribirla, etc.

Trate de almacenar la posición del archivo con ftell antes de leer la línea, y rebobine la posición del archivo hasta este punto con fseek cada vez que necesite procesarlo.