~ubuntu-branches/ubuntu/dapper/tiff/dapper-updates

« back to all changes in this revision

Viewing changes to contrib/dbs/tiff-rgb.c

  • Committer: Bazaar Package Importer
  • Author(s): Martin Pitt
  • Date: 2005-11-09 18:21:15 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20051109182115-v0fd3zcbrq2sq6u4
Tags: 3.7.4-1ubuntu1
* Synchronize to Debian.
* Only change left: xlibmesa-gl-dev -> libgl1-mesa-dev build dependency
  change.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * tiff-rgb.c -- create a 24-bit Class R (rgb) TIFF file
3
 
 *
4
 
 * Copyright 1990 by Digital Equipment Corporation, Maynard, Massachusetts.
5
 
 *
6
 
 *                        All Rights Reserved
7
 
 *
8
 
 * Permission to use, copy, modify, and distribute this software and its
9
 
 * documentation for any purpose and without fee is hereby granted,
10
 
 * provided that the above copyright notice appear in all copies and that
11
 
 * both that copyright notice and this permission notice appear in
12
 
 * supporting documentation, and that the name of Digital not be
13
 
 * used in advertising or publicity pertaining to distribution of the
14
 
 * software without specific, written prior permission.
15
 
 *
16
 
 * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
17
 
 * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
18
 
 * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
19
 
 * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
20
 
 * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
21
 
 * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
22
 
 * SOFTWARE.
23
 
 */
24
 
 
25
 
#include <math.h>
26
 
#include <stdio.h>
27
 
#include <tiffio.h>
28
 
 
29
 
#define ROUND(x)    (u_short) ((x) + 0.5)
30
 
#define CMSIZE      256
31
 
#define WIDTH       525
32
 
#define HEIGHT      512
33
 
#define TIFF_GAMMA  2.2
34
 
 
35
 
typedef unsigned char u_char;
36
 
typedef unsigned short u_short;
37
 
typedef unsigned long u_long;
38
 
 
39
 
void                Usage();
40
 
char *              programName;
41
 
 
42
 
void
43
 
main(argc, argv)
44
 
    int             argc;
45
 
    char **         argv;
46
 
{
47
 
    char *          input_file;
48
 
    double          image_gamma;
49
 
    int             i, j;
50
 
    TIFF *          tif;
51
 
    u_char *        scan_line;
52
 
    u_short         red[CMSIZE], green[CMSIZE], blue[CMSIZE];
53
 
    u_long          refblackwhite[2*3];
54
 
 
55
 
    programName = argv[0];
56
 
 
57
 
    switch (argc) {
58
 
    case 2:
59
 
        image_gamma = TIFF_GAMMA;
60
 
        input_file = argv[1];
61
 
        break;
62
 
    case 4:
63
 
        if (!strcmp(argv[1], "-gamma")) {
64
 
            image_gamma = atof(argv[2]);
65
 
            input_file = argv[3];
66
 
        } else
67
 
            Usage();
68
 
        break;
69
 
    default:
70
 
        Usage();
71
 
    }
72
 
 
73
 
    for (i = 0; i < CMSIZE; i++) {
74
 
        if (i == 0)
75
 
            red[i] = green[i] = blue[i] = 0;
76
 
        else {
77
 
            red[i] = ROUND((pow(i / 255.0, 1.0 / image_gamma) * 65535.0));
78
 
            green[i] = ROUND((pow(i / 255.0, 1.0 / image_gamma) * 65535.0));
79
 
            blue[i] = ROUND((pow(i / 255.0, 1.0 / image_gamma) * 65535.0));
80
 
        }
81
 
    }
82
 
    refblackwhite[0] = 0; refblackwhite[1] = 255;
83
 
    refblackwhite[2] = 0; refblackwhite[3] = 255;
84
 
    refblackwhite[4] = 0; refblackwhite[5] = 255;
85
 
 
86
 
    if ((tif = TIFFOpen(input_file, "w")) == NULL) {
87
 
        fprintf(stderr, "can't open %s as a TIFF file\n", input_file);
88
 
        exit(0);
89
 
    }
90
 
 
91
 
    TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, WIDTH);
92
 
    TIFFSetField(tif, TIFFTAG_IMAGELENGTH, HEIGHT);
93
 
    TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8);
94
 
    TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_NONE);
95
 
    TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB);
96
 
    TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 3);
97
 
    TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, 1);
98
 
    TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
99
 
    TIFFSetField(tif, TIFFTAG_RESOLUTIONUNIT, RESUNIT_NONE);
100
 
#ifdef notdef
101
 
    TIFFSetField(tif, TIFFTAG_WHITEPOINT, whitex, whitey);
102
 
    TIFFSetField(tif, TIFFTAG_PRIMARYCHROMATICITIES, primaries);
103
 
#endif
104
 
    TIFFSetField(tif, TIFFTAG_REFERENCEBLACKWHITE, refblackwhite);
105
 
    TIFFSetField(tif, TIFFTAG_TRANSFERFUNCTION, red, green, blue);
106
 
 
107
 
    scan_line = (u_char *) malloc(WIDTH * 3);
108
 
 
109
 
    for (i = 0; i < 255; i++) {
110
 
        for (j = 0; j < 75; j++) {
111
 
             scan_line[j * 3] = 255;
112
 
             scan_line[(j * 3) + 1] = 255 - i;
113
 
             scan_line[(j * 3) + 2] = 255 - i;
114
 
        }
115
 
        for (j = 75; j < 150; j++) {
116
 
             scan_line[j * 3] = 255 - i;
117
 
             scan_line[(j * 3) + 1] = 255;
118
 
             scan_line[(j * 3) + 2] = 255 - i;
119
 
        }
120
 
        for (j = 150; j < 225; j++) {
121
 
             scan_line[j * 3] = 255 - i;
122
 
             scan_line[(j * 3) + 1] = 255 - i;
123
 
             scan_line[(j * 3) + 2] = 255;
124
 
        }
125
 
        for (j = 225; j < 300; j++) {
126
 
             scan_line[j * 3] = (i - 1) / 2;
127
 
             scan_line[(j * 3) + 1] = (i - 1) / 2;
128
 
             scan_line[(j * 3) + 2] = (i - 1) / 2;
129
 
        }
130
 
        for (j = 300; j < 375; j++) {
131
 
             scan_line[j * 3] = 255 - i;
132
 
             scan_line[(j * 3) + 1] = 255;
133
 
             scan_line[(j * 3) + 2] = 255;
134
 
        }
135
 
        for (j = 375; j < 450; j++) {
136
 
             scan_line[j * 3] = 255;
137
 
             scan_line[(j * 3) + 1] = 255 - i;
138
 
             scan_line[(j * 3) + 2] = 255;
139
 
        }
140
 
        for (j = 450; j < 525; j++) {
141
 
             scan_line[j * 3] = 255;
142
 
             scan_line[(j * 3) + 1] = 255;
143
 
             scan_line[(j * 3) + 2] = 255 - i;
144
 
        }
145
 
        TIFFWriteScanline(tif, scan_line, i, 0);
146
 
    }
147
 
    for (i = 255; i < 512; i++) {
148
 
        for (j = 0; j < 75; j++) {
149
 
             scan_line[j * 3] = i;
150
 
             scan_line[(j * 3) + 1] = 0;
151
 
             scan_line[(j * 3) + 2] = 0;
152
 
        }
153
 
        for (j = 75; j < 150; j++) {
154
 
             scan_line[j * 3] = 0;
155
 
             scan_line[(j * 3) + 1] = i;
156
 
             scan_line[(j * 3) + 2] = 0;
157
 
        }
158
 
        for (j = 150; j < 225; j++) {
159
 
             scan_line[j * 3] = 0;
160
 
             scan_line[(j * 3) + 1] = 0;
161
 
             scan_line[(j * 3) + 2] = i;
162
 
        }
163
 
        for (j = 225; j < 300; j++) {
164
 
             scan_line[j * 3] = (i - 1) / 2;
165
 
             scan_line[(j * 3) + 1] = (i - 1) / 2;
166
 
             scan_line[(j * 3) + 2] = (i - 1) / 2;
167
 
        }
168
 
        for (j = 300; j < 375; j++) {
169
 
             scan_line[j * 3] = 0;
170
 
             scan_line[(j * 3) + 1] = i;
171
 
             scan_line[(j * 3) + 2] = i;
172
 
        }
173
 
        for (j = 375; j < 450; j++) {
174
 
             scan_line[j * 3] = i;
175
 
             scan_line[(j * 3) + 1] = 0;
176
 
             scan_line[(j * 3) + 2] = i;
177
 
        }
178
 
        for (j = 450; j < 525; j++) {
179
 
             scan_line[j * 3] = i;
180
 
             scan_line[(j * 3) + 1] = i;
181
 
             scan_line[(j * 3) + 2] = 0;
182
 
        }
183
 
        TIFFWriteScanline(tif, scan_line, i, 0);
184
 
    }
185
 
 
186
 
    free(scan_line);
187
 
    TIFFClose(tif);
188
 
    exit(0);
189
 
}
190
 
 
191
 
void
192
 
Usage()
193
 
{
194
 
    fprintf(stderr, "Usage: %s -gamma gamma tiff-image\n", programName);
195
 
    exit(0);
196
 
}