gradtool
diff gradtool.c @ 1:c438411b801b
latest changes from svn (saving grad files)
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Fri, 09 Oct 2015 01:45:12 +0300 |
parents | 960cea2731c4 |
children | 3ac4d33e568f |
line diff
1.1 --- a/gradtool.c Tue Jun 19 05:30:45 2012 +0300 1.2 +++ b/gradtool.c Fri Oct 09 01:45:12 2015 +0300 1.3 @@ -1,6 +1,12 @@ 1.4 #include <stdio.h> 1.5 #include <stdlib.h> 1.6 +#include <string.h> 1.7 +#include <errno.h> 1.8 +#ifdef __APPLE__ 1.9 +#include <GLUT/glut.h> 1.10 +#else 1.11 #include <GL/glut.h> 1.12 +#endif 1.13 1.14 #define MAX_POS 512 1.15 1.16 @@ -23,7 +29,8 @@ 1.17 void rm_val(struct track *track, float pos); 1.18 float get_val(struct track *track, float pos); 1.19 1.20 -void save(void); 1.21 +int save_ppm(const char *fname, int img_width); 1.22 +int save_grad(const char *fname); 1.23 1.24 void key_handler(unsigned char key, int x, int y); 1.25 void skey_handler(int key, int x, int y); 1.26 @@ -256,22 +263,20 @@ 1.27 } 1.28 1.29 1.30 -#define IMG_X 256 1.31 -#define FNAME "grad.ppm" 1.32 -void save(void) 1.33 +int save_ppm(const char *fname, int img_width) 1.34 { 1.35 int i; 1.36 FILE *fp; 1.37 1.38 - if(!(fp = fopen(FNAME, "wb"))) { 1.39 - perror("failed to write " FNAME); 1.40 - return; 1.41 + if(!(fp = fopen(fname, "wb"))) { 1.42 + fprintf(stderr, "failed to write %s: %s\n", fname, strerror(errno)); 1.43 + return -1; 1.44 } 1.45 1.46 - fprintf(fp, "P6\n%d %d\n255\n", IMG_X, 1); 1.47 + fprintf(fp, "P6\n%d 1\n255\n", img_width); 1.48 1.49 - for(i=0; i<IMG_X; i++) { 1.50 - float t = (float)i / (float)IMG_X; 1.51 + for(i=0; i<img_width; i++) { 1.52 + float t = (float)i / (float)img_width; 1.53 int r = get_val(&tred, t) * 255.0; 1.54 int g = get_val(&tgreen, t) * 255.0; 1.55 int b = get_val(&tblue, t) * 255.0; 1.56 @@ -282,6 +287,37 @@ 1.57 } 1.58 1.59 fclose(fp); 1.60 + return 0; 1.61 +} 1.62 + 1.63 +int save_grad(const char *fname) 1.64 +{ 1.65 + int i; 1.66 + FILE *fp; 1.67 + struct track *tr[] = {&tred, &tgreen, &tblue}; 1.68 + 1.69 + if(!(fp = fopen(fname, "w"))) { 1.70 + return -1; 1.71 + } 1.72 + 1.73 + fprintf(fp, "GRAD\n"); 1.74 + 1.75 + for(i=0; i<3; i++) { 1.76 + key_t *ptr = tr[i]->keys->next; 1.77 + 1.78 + while(ptr) { 1.79 + float t = (float)ptr->pos / (float)MAX_POS; 1.80 + float r = get_val(&tred, t); 1.81 + float g = get_val(&tgreen, t); 1.82 + float b = get_val(&tblue, t); 1.83 + 1.84 + fprintf(fp, "%f\t%f %f %f\n", t, r, g, b); 1.85 + ptr = ptr->next; 1.86 + } 1.87 + } 1.88 + 1.89 + fclose(fp); 1.90 + return 0; 1.91 } 1.92 1.93 1.94 @@ -298,7 +334,12 @@ 1.95 1.96 case 's': 1.97 case 'S': 1.98 - save(); 1.99 + save_ppm("grad.ppm", 256); 1.100 + break; 1.101 + 1.102 + case 'g': 1.103 + case 'G': 1.104 + save_grad("grad.grad"); 1.105 break; 1.106 1.107 case 'c':