]>
git.saurik.com Git - wxWidgets.git/blob - src/tiff/contrib/ras/ras2tif.c
2 static char sccsid
[] = "@(#)ras2tif.c 1.2 90/03/06";
5 * ras2tif.c - Converts from a Sun Rasterfile to a Tagged Image File.
7 * Copyright (c) 1990 by Sun Microsystems, Inc.
9 * Author: Patrick J. Naughton
10 * naughton@wind.sun.com
12 * Permission to use, copy, modify, and distribute this software and its
13 * documentation for any purpose and without fee is hereby granted,
14 * provided that the above copyright notice appear in all copies and that
15 * both that copyright notice and this permission notice appear in
16 * supporting documentation.
18 * This file is provided AS IS with no warranties of any kind. The author
19 * shall have no liability with respect to the infringement of copyrights,
20 * trade secrets or any patents by this file or any part thereof. In no
21 * event will the author be liable for any lost revenue or profits or
22 * other special, indirect and consequential damages.
24 * Comments and additions should be sent to the author:
28 * 2550 Garcia Ave, MS 14-40
29 * Mountain View, CA 94043
34 * 06-Mar-90: fix bug in SCALE() macro.
35 * got rid of xres and yres, (they weren't working anyways).
36 * fixed bpsl calculation.
37 * 25-Nov-99: y2k fix (year as 1900 + tm_year) <mike@onshore.com>
40 * This program takes a Sun Rasterfile [see rasterfile(5)] as input and
41 * writes a MicroSoft/Aldus "Tagged Image File Format" image or "TIFF" file.
42 * The input file may be standard input, but the output TIFF file must be a
43 * real file since seek(2) is used.
48 #include <pixrect/pixrect_hs.h>
54 #define SCALE(x) (((x)*((1L<<16)-1))/255)
56 boolean Verbose
= False
;
57 boolean dummyinput
= False
;
58 char *pname
; /* program name (used for error messages) */
65 fprintf(stderr
, s1
, pname
, s2
);
72 error("usage: %s -[vq] [-|rasterfile] TIFFfile\n", NULL
);
87 Pixrect
*pix
; /* The Sun Pixrect */
88 colormap_t Colormap
; /* The Pixrect Colormap */
99 short samplesperpixel
;
102 static char *version
= "ras2tif 1.0";
103 static char *datetime
= "1990:01:01 12:00:00";
105 gettimeofday(&tv
, (struct timezone
*) NULL
);
106 ct
= localtime(&tv
.tv_sec
);
107 year
=1900 + ct
->tm_year
;
108 sprintf(datetime
, "%04d:%02d:%02d %02d:%02d:%02d",
109 year
, ct
->tm_mon
+ 1, ct
->tm_mday
,
110 ct
->tm_hour
, ct
->tm_min
, ct
->tm_sec
);
112 setbuf(stderr
, NULL
);
116 if ((++argv
)[0][0] == '-') {
117 switch (argv
[0][1]) {
131 fprintf(stderr
, "%s: illegal option -%c.\n", pname
,
135 } else if (inf
== NULL
&& !dummyinput
) {
137 } else if (outf
== NULL
)
144 error("%s: can't write output file to a stream.\n", NULL
);
146 if (dummyinput
|| inf
== NULL
) {
147 inf
= "Standard Input";
149 } else if ((fp
= fopen(inf
, "r")) == NULL
)
150 error("%s: %s couldn't be opened.\n", inf
);
153 fprintf(stderr
, "Reading rasterfile from %s...", inf
);
155 pix
= pr_load(fp
, &Colormap
);
157 error("%s: %s is not a raster file.\n", inf
);
160 fprintf(stderr
, "done.\n");
163 fprintf(stderr
, "Writing %s...", outf
);
165 tif
= TIFFOpen(outf
, "w");
168 error("%s: error opening TIFF file %s", outf
);
170 width
= pix
->pr_width
;
171 height
= pix
->pr_height
;
172 depth
= pix
->pr_depth
;
178 photometric
= PHOTOMETRIC_MINISBLACK
;
183 photometric
= PHOTOMETRIC_PALETTE
;
188 photometric
= PHOTOMETRIC_RGB
;
193 photometric
= PHOTOMETRIC_RGB
;
196 error("%s: bogus depth: %d\n", depth
);
199 bpsl
= ((depth
* width
+ 15) >> 3) & ~1;
200 rowsperstrip
= (8 * 1024) / bpsl
;
202 TIFFSetField(tif
, TIFFTAG_IMAGEWIDTH
, width
);
203 TIFFSetField(tif
, TIFFTAG_IMAGELENGTH
, height
);
204 TIFFSetField(tif
, TIFFTAG_BITSPERSAMPLE
, bitspersample
);
205 TIFFSetField(tif
, TIFFTAG_ORIENTATION
, ORIENTATION_TOPLEFT
);
206 TIFFSetField(tif
, TIFFTAG_COMPRESSION
, COMPRESSION_LZW
);
207 TIFFSetField(tif
, TIFFTAG_PHOTOMETRIC
, photometric
);
208 TIFFSetField(tif
, TIFFTAG_DOCUMENTNAME
, inf
);
209 TIFFSetField(tif
, TIFFTAG_IMAGEDESCRIPTION
, "converted Sun rasterfile");
210 TIFFSetField(tif
, TIFFTAG_SAMPLESPERPIXEL
, samplesperpixel
);
211 TIFFSetField(tif
, TIFFTAG_ROWSPERSTRIP
, rowsperstrip
);
212 TIFFSetField(tif
, TIFFTAG_STRIPBYTECOUNTS
, height
/ rowsperstrip
);
213 TIFFSetField(tif
, TIFFTAG_PLANARCONFIG
, PLANARCONFIG_CONTIG
);
214 TIFFSetField(tif
, TIFFTAG_SOFTWARE
, version
);
215 TIFFSetField(tif
, TIFFTAG_DATETIME
, datetime
);
217 memset(red
, 0, sizeof(red
));
218 memset(green
, 0, sizeof(green
));
219 memset(blue
, 0, sizeof(blue
));
221 TIFFSetField(tif
, TIFFTAG_COLORMAP
, red
, green
, blue
);
222 for (i
= 0; i
< Colormap
.length
; i
++) {
223 red
[i
] = SCALE(Colormap
.map
[0][i
]);
224 green
[i
] = SCALE(Colormap
.map
[1][i
]);
225 blue
[i
] = SCALE(Colormap
.map
[2][i
]);
229 fprintf(stderr
, "%dx%dx%d image, ", width
, height
, depth
);
231 for (row
= 0; row
< height
; row
++)
232 if (TIFFWriteScanline(tif
,
233 (u_char
*) mprd_addr(mpr_d(pix
), 0, row
),
235 fprintf("failed a scanline write (%d)\n", row
);
242 fprintf(stderr
, "done.\n");