#include #include #include #include "constants.h" #include "funcdefs.h" int width, linesize; FILE *fp; int startpic(char *fname, int y, int x) { int header[2]; if ((fp = fopen(fname, "w")) == NULL){ fprintf(stderr, "fopen() failed\n"); fflush(stderr); return -1; } width = x; linesize = 3 * width * sizeof(unsigned char); header[0] = y; header[1] = x; fprintf(fp, "P3\n"); fprintf(fp, "%d %d\n", y, x); fprintf(fp, "255\n"); return 0; } int linepic(double pixels[SCREENWIDTH][3]) { unsigned char buffer[SCREENWIDTH][3]; int i, r, g, b; for (i = 0; i < width; i++) { r = gammacorrect(pixels[i][0]); g = gammacorrect(pixels[i][1]); b = gammacorrect(pixels[i][2]); buffer[i][0] = r; buffer[i][1] = g; buffer[i][2] = b; fprintf(fp, "%d %d %d\t", buffer[i][0], buffer[i][1], buffer[i][2]); } fprintf(fp, "\n"); return 0; } int endpic() { fclose(fp); return 0; } int gammacorrect(double intensity) { int ival; double dval; dval = intensity / 250.0; if (dval > 1.0) dval = 1.0; if (dval < 0.001) dval = 0.001; dval = exp(log(dval) / GAMMA); dval *= 255.0; ival = (int)(dval + 0.5); return ival; }