Благодаря помощи каждого пользователя, который прокомментировал / поделился своим решением по этому вопросу, я думаю, что теперь у меня есть решение, которое работает так, как я хочу, как показано ниже.
Код распечатывает файл ppm в указанном ниже формате, а затем переходит к поиску среднего значения RGB файла, который печатается в cmd.
P6
# ignores comments in header
width
height
max colour value
Моя попытка рабочего решения каквидно ниже:
#include <stdlib.h>
#include <stdio.h>
typedef struct {
unsigned char r, g, b;
} pixel;
int main(int argc, char* argv[]) {
char magic_number[1];
int w, h, m;
int red = 0;
int green = 0;
int blue = 0;
int total = 0; //Loop count initialised at 0
FILE* f; //File handle
pixel currentPix; //Variable declaration for the current pixel
//Open and read the PPM file
f = fopen("Dog2048x2048.ppm", "r");
if (f == NULL) {
fprintf(stderr, "Error: file cannot be opened");
exit(1);
}
//Get P6, width, height, maxcolour value
fscanf(f, "%s %d %d %d", &magic_number, &w, &h, &m);
printf("magic_n = %s, width = %d, height = %d, max_colour = %d\n", magic_number, w, h, m);
//iterate through the height and width of the ppm file
for (int j = 0; j < h; j++) {
for (int i = 0; i < w; i++) {
//Read data from the given stream
fread(¤tPix, 3, 1, f);
//Stores current pixel RGB values in red, green, blue variables
red += currentPix.r;
green += currentPix.g;
blue += currentPix.b;
//Counts the iterations
total++;
}
}
//calculate averages for red, green, blue
red /= total;
green /= total;
blue /= total;
//print output of average rgb
printf("%d, %d, %d", red, green, blue);
getchar();
return 0;
}