/* * This software is copyrighted as noted below. It may be freely copied, * modified, and redistributed, provided that the copyright notice is * preserved on all copies. * * There is no warranty or other guarantee of fitness for this software, * it is provided solely "as is". Bug reports or fixes may be sent * to the author, who may or may not act on them as he desires. * * You may not include this software in a program or other software product * without supplying the source, or without informing the end-user that the * source is available for no extra charge. * * If you modify this software, you should include a notice giving the * name of the person performing the modification, the date of modification, * and the reason for such modification. */ /* * toutah - * Convert a IRIS image to Utah raster toolkit. * * To comple: * cc -I/usr/include/gl toutah.c -o toutah -lrle -limage * * Paul Haeberli - 1990 */ #include "stdio.h" #include "image.h" #include "rle.h" short rbuf[8192]; short gbuf[8192]; short bbuf[8192]; rle_hdr hdr; main(argc,argv) int argc; char **argv; { IMAGE *image; int i, y, z; int xsize, ysize, zsize; unsigned char *rows[3]; char *infname = NULL, *outfname = NULL; if ( scanargs( argc, argv, "% o%-outfile.rle!s, infile.rgb!s\n\ (Convert SGI image in infile.rgb to URT RLE image in outfile.rle.)", &i, &outfname, &infname ) == 0 ) exit( 1 ); /* open the input file */ image=iopen(infname,"r"); if(!image) { fprintf(stderr,"%s: can't open input file %s\n",cmd_name(argv),infname); exit(1); } xsize = image->xsize; ysize = image->ysize; zsize = image->zsize; /* open the output file */ hdr = *rle_hdr_init( NULL ); rle_names( &hdr, cmd_name( argv ), outfname, 0 ); rle_addhist( argv, (rle_hdr *)NULL, &hdr ); hdr.rle_file = rle_open_f(hdr.cmd,outfname,"w"); /* allocate row buffers */ rows[0] = (unsigned char *)malloc(xsize*sizeof(unsigned char)); rows[1] = (unsigned char *)malloc(xsize*sizeof(unsigned char)); rows[2] = (unsigned char *)malloc(xsize*sizeof(unsigned char)); /* set up the header */ hdr.xmin = 0; hdr.xmax = xsize - 1; hdr.ymin = 0; hdr.ymax = ysize - 1; hdr.ncolors = 3; hdr.background = 0; hdr.alpha = 0; hdr.ncmap = 0; RLE_SET_BIT(hdr,RLE_RED); RLE_SET_BIT(hdr,RLE_GREEN); RLE_SET_BIT(hdr,RLE_BLUE); rle_put_setup(&hdr); /* copy image data */ for(y=0; yzsize<3) { getrow(image,rbuf,y,0); stoc(rbuf,rows[0],xsize); stoc(rbuf,rows[1],xsize); stoc(rbuf,rows[2],xsize); } else { getrow(image,rbuf,y,0); getrow(image,gbuf,y,1); getrow(image,bbuf,y,2); stoc(rbuf,rows[0],xsize); stoc(gbuf,rows[1],xsize); stoc(bbuf,rows[2],xsize); } rle_putrow(rows,xsize,&hdr); } /* close the output file */ rle_puteof(&hdr); exit(0); } stoc(sptr,cptr,n) register unsigned short *sptr; register unsigned char *cptr; register int n; { while(n--) { if(n>=8) { cptr[0] = sptr[0]; cptr[1] = sptr[1]; cptr[2] = sptr[2]; cptr[3] = sptr[3]; cptr[4] = sptr[4]; cptr[5] = sptr[5]; cptr[6] = sptr[6]; cptr[7] = sptr[7]; sptr+=8; cptr+=8; n -= 7; } else { *cptr++ = *sptr++; } } }