ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/px/greyscale.c
Revision: 2.7
Committed: Sun Mar 28 20:33:13 2004 UTC (20 years ago) by schorsch
Content type: text/plain
Branch: MAIN
CVS Tags: rad3R6P1, rad3R6
Changes since 2.6: +20 -10 lines
Log Message:
Continued ANSIfication, and other fixes and clarifications.

File Contents

# Content
1 #ifndef lint
2 static const char RCSid[] = "$Id: greyscale.c,v 2.6 2003/02/22 02:07:27 greg Exp $";
3 #endif
4 /*
5 * greyscale.c - program to produce grey test levels.
6 *
7 * 4/21/86
8 */
9
10 #include <stdio.h>
11
12 #include <math.h>
13
14 #include "color.h"
15
16
17 double minlog = 0.0; /* minimum for log scale (0 == linear) */
18
19 static void greyscale(COLOR col0);
20 static void printargs(int ac, char **av, FILE *fp);
21
22
23 int
24 main(
25 int argc,
26 char *argv[]
27 )
28 {
29 COLOR col;
30 double d1,d2,d3;
31 int i;
32
33 printargs(argc, argv, stdout);
34
35 setcolor(col, 1.0, 1.0, 1.0);
36
37 for (i = 1; i < argc && argv[i][0] == '-'; i++)
38 switch (argv[i][1]) {
39 case 'c':
40 d1 = atof(argv[++i]);
41 d2 = atof(argv[++i]);
42 d3 = atof(argv[++i]);
43 setcolor(col, d1, d2, d3);
44 break;
45 case 'l':
46 d1 = atof(argv[++i]);
47 if (d1 <= 0.0)
48 minlog = 0.0;
49 else
50 minlog = log(d1);
51 break;
52 default:
53 fprintf(stderr, "%s: unknown option \"%s\"\n",
54 argv[0], argv[i]);
55 exit(1);
56 }
57
58 printf("\n");
59 printf("-Y 512 +X 512\n");
60 greyscale(col);
61 return 0;
62 }
63
64
65 static void
66 greyscale( /* output our grey scale */
67 COLOR col0
68 )
69 {
70 COLOR col1, col2, scanline[512];
71 double x;
72 int j;
73 register int i, k;
74
75 for (j = 0; j < 512; j += 32) {
76 for (k = 0; k < 512; k++)
77 setcolor(scanline[k], 0.0, 0.0, 0.0);
78 for (k = 0; k < 4; k++)
79 if (fwritescan(scanline, 512, stdout) < 0)
80 goto writerr;
81 x = j/32 / 16.0;
82 if (minlog != 0.0)
83 x = exp((1.0-x)*minlog);
84 setcolor(col1, x, x, x);
85
86 for (i = 0; i < 512; i += 32) {
87 for (k = 0; k < 4; k++)
88 setcolor(scanline[i+k], 0.0, 0.0, 0.0);
89 x = i/32 / 255.0;
90 if (minlog != 0.0) {
91 x = exp(-x*minlog);
92 setcolor(col2, x, x, x);
93 multcolor(col2, col1);
94 } else {
95 setcolor(col2, x, x, x);
96 addcolor(col2, col1);
97 }
98 multcolor(col2, col0);
99 for (k = 4; k < 32; k++)
100 copycolor(scanline[i+k], col2);
101 }
102 for (i = 0; i < 28; i++)
103 if (fwritescan(scanline, 512, stdout) < 0)
104 goto writerr;
105 }
106 return;
107 writerr:
108 fprintf(stderr, "write error in greyscale\n");
109 exit(1);
110 }
111
112
113 static void
114 printargs( /* print arguments to a file */
115 int ac,
116 char **av,
117 FILE *fp
118 )
119 {
120 while (ac-- > 0) {
121 fputs(*av++, fp);
122 putc(' ', fp);
123 }
124 putc('\n', fp);
125 }