This is tifftorle.c in view mode; [Download] [Up]
/* tifftorle.c */ /* main program for converting 24-bit TIFF files to 24-bit * Utah Raster Toolkit RLE files. * by Bailey Brown, Jr. 21 June 1990 */ #include "rle.h" #undef TIFF /* Defined by rle_config.h. */ #include <stdio.h> #include "tiffio.h" #ifndef USE_STRING_H #include <strings.h> #else #include <string.h> #endif #ifdef USE_PROTOTYPES void error(CONST_DECL char *s); #else void error(); #endif void get_scanlines(); static rle_hdr the_hdr; TIFF *tif; unsigned char *tiffbuf; /* needed to read all scanlines before converting to tiff (rle is upside down) */ static rle_pixel **scan_red; static rle_pixel **scan_green; static rle_pixel **scan_blue; int flip; char * my_name = NULL; void main(argc, argv) int argc; char *argv[]; { unsigned short imagelength, imagewidth, shortval; int row, i; rle_pixel *rows[4]; char *infname = NULL, *outfname = NULL; flip = 0; my_name = cmd_name( argv ); if ( scanargs( argc, argv, "% o%-outfile.rle!s infile.tiff!s", &i, &outfname, &infname ) == 0 ) exit( 1 ); tif = TIFFOpen(infname, "rb"); if (!tif) error("can't open input file"); the_hdr.rle_file = rle_open_f(cmd_name(argv), outfname, "w"); TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &shortval); if (shortval != 2) error("tiff file must be 24-bit RGB"); TIFFGetField(tif, TIFFTAG_PLANARCONFIG, &shortval ); if (shortval != 1) error("can't handle planar config"); TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &imagewidth); TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &imagelength); RLE_SET_BIT(the_hdr, RLE_RED); RLE_SET_BIT(the_hdr, RLE_GREEN); RLE_SET_BIT(the_hdr, RLE_BLUE); the_hdr.ncolors = 3; the_hdr.bg_color = NULL; the_hdr.alpha = 0; the_hdr.background = 0; the_hdr.xmin = 0; the_hdr.xmax = imagewidth - 1; the_hdr.ymin = 0; the_hdr.ymax = imagelength - 1; the_hdr.ncmap = 0; the_hdr.cmaplen = 0; the_hdr.cmap = 0; rle_addhist( argv, (rle_hdr *)NULL, &the_hdr ); rle_put_setup( &the_hdr ); tiffbuf = (unsigned char*)malloc(TIFFScanlineSize(tif)); if (!tiffbuf) error("can't allocate tiff scanline buffer"); get_scanlines(); rows[0] = NULL; for ( row = 0; row < the_hdr.ymax + 1; row++) { rows[1] = scan_red[row]; rows[2] = scan_green[row]; rows[3] = scan_blue[row]; rle_putrow(rows+1, the_hdr.xmax+1, &the_hdr); } } void get_scanlines() { int i,j,k,n; scan_red = (rle_pixel**)malloc(sizeof(rle_pixel*)*(the_hdr.ymax+1)); scan_green = (rle_pixel**)malloc(sizeof(rle_pixel*)*(the_hdr.ymax+1)); scan_blue = (rle_pixel**)malloc(sizeof(rle_pixel*)*(the_hdr.ymax+1)); if (!(scan_red && scan_green && scan_blue)) error("can't allocate a scan buffer"); if (flip) { for (i = 0; i < the_hdr.ymax+1; i++) { TIFFReadScanline(tif, tiffbuf, i, 0); scan_red[i] = (unsigned char*)malloc(the_hdr.xmax+1); scan_green[i] = (unsigned char*)malloc(the_hdr.xmax+1); scan_blue[i] = (unsigned char*)malloc(the_hdr.xmax+1); if (!(scan_red[i] && scan_green[i] && scan_blue[i])) error("can't allocate scan buffer"); for (k = j = 0; j < the_hdr.xmax+1; k +=3, j++) { scan_red[i][j] = tiffbuf[k]; scan_green[i][j] = tiffbuf[k+1]; scan_blue[i][j] = tiffbuf[k+2]; } } } else { for (i = 0; i < the_hdr.ymax+1; i++) { n = the_hdr.ymax - i; TIFFReadScanline(tif, tiffbuf, i, 0); scan_red[n] = (unsigned char*)malloc(the_hdr.xmax+1); scan_green[n] = (unsigned char*)malloc(the_hdr.xmax+1); scan_blue[n] = (unsigned char*)malloc(the_hdr.xmax+1); if (!(scan_red[n] && scan_green[n] && scan_blue[n])) error("can't allocate scan buffer"); for (k = j = 0; j < the_hdr.xmax+1; k+= 3, j++) { scan_red[n][j] = tiffbuf[k]; scan_green[n][j] = tiffbuf[k+1]; scan_blue[n][j] = tiffbuf[k+2]; } } } } void error(s) CONST_DECL char *s; { fprintf(stderr,"%s: %s\n", my_name, s); exit(2); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.