#include #include typedef unsigned char uchar; uchar Ri[1080][1920], Gi[1080][1920], Bi[1080][1920]; uchar Ro[1080][1920], Go[1080][1920], Bo[1080][1920]; void readfile () { int i, j, r, g, b; FILE *fp; fp = (FILE *)fopen("original.ppm", "r"); while (fgetc(fp) != '\n'); while (fgetc(fp) != '\n'); while (fgetc(fp) != '\n'); for (i=0; i<1080; ++i) { for (j=0; j<1920; ++j) { fscanf(fp, "%d%d%d", &r, &g, &b); Ri[i][j] = (uchar)r; Gi[i][j] = (uchar)g; Bi[i][j] = (uchar)b; } } fclose(fp); } void blur ( int k ) { int i, j, rs, re, cs, ce, rd, cd, u, v, r, g, b, c; for (i=0; i<1080; ++i) { for (j=0; j<1920; ++j) { rs = i - k; if (rs < 0) rs = 0; re = i + k; if (re >= 1080) re = 1079; cs = j - k; if (cs < 0) cs = 0; ce = j + k; if (ce >= 1920) ce = 1919; r = g = b = c = 0; for (u=rs; u<=re; ++u) { rd = (u - i) * (u - i); for (v=cs; v<=ce; ++v) { cd = (v - j) * (v - j); if (rd + cd <= k * k) { ++c; r += Ri[u][v]; g += Gi[u][v]; b += Bi[u][v]; } } } Ro[i][j] = r / c; Go[i][j] = g / c; Bo[i][j] = b / c; } } } void writefile () { int i, j; FILE *fp; fp = (FILE *)fopen("blurred.ppm", "w"); fprintf(fp, "P3\n1920 1080\n255\n"); for (i=0; i<1080; ++i) { for (j=0; j<1920; ++j) { fprintf(fp, "%d %d %d\n", (int)Ro[i][j], (int)Go[i][j], (int)Bo[i][j]); } } fclose(fp); } int main ( int argc, char *argv[] ) { int k = 5; if (argc > 1) k = atoi(argv[1]); readfile(); printf("Input file read\n"); blur(k); printf("Blurring done\n"); writefile(); printf("Output file written\n"); exit(0); }