~ubuntu-branches/ubuntu/karmic/tiff/karmic-security

« back to all changes in this revision

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

  • Committer: Bazaar Package Importer
  • Author(s): Fabio M. Di Nitto
  • Date: 2004-10-14 07:57:59 UTC
  • Revision ID: james.westby@ubuntu.com-20041014075759-a77e7zuaetya8cp0
Tags: upstream-3.6.1
ImportĀ upstreamĀ versionĀ 3.6.1

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
}