📄 utah.c
字号:
/* file: utah.c description: interface to Utah RLE toolkit author: A. T. Campbell date: October 27, 1989*/#ifndef lintstatic char sccsid[] = "%W% %G%"; /* SCCS info */#endif lint #include <math.h>#include <stdio.h>#ifdef sequent#include <strings.h>#else#include <string.h>#endif#include "utah.h"/******************************************************************************//* return values */extern void free();extern char *malloc();/******************************************************************************/utah_read_close(ufp)UTAH_FILE *ufp;{ return(0);}/******************************************************************************/UTAH_FILE *utah_read_init(fname, ht, wd)char *fname;int *ht, *wd;{ FILE *fp; UTAH_FILE *ufp; /* open output stream */ if (!strcmp(fname, "")) fp = stdin; else { if ((fp = fopen(fname, "r")) == NULL) return(NULL); } /* change the default rle_dflt_hdr struct to match what we need */ ufp = (UTAH_FILE *) malloc(sizeof(UTAH_FILE)); *ufp = rle_dflt_hdr; ufp->rle_file = fp; /* read the header in the input file */ if (rle_get_setup(ufp) != 0) return(NULL); /* get image size */ *wd = ufp->xmax - ufp->xmin + 1; *ht = ufp->ymax - ufp->ymin + 1; /* normal termination */ return(ufp);}/******************************************************************************/utah_read_pixels(ufp, pixels)UTAH_FILE *ufp;unsigned char pixels[][3];{ static unsigned n = 0; static unsigned char *r = NULL, *g = NULL, *b = NULL; int i, width; /* allocate storage */ width = ufp->xmax + 1; if (width > n) { if (n > 0) { free((char *)r); free((char *)g); free((char *)b); } n = width; r = (unsigned char *) malloc(n * sizeof(unsigned char)); g = (unsigned char *) malloc(n * sizeof(unsigned char)); b = (unsigned char *) malloc(n * sizeof(unsigned char)); } /* read this row */ utah_read_rgb(ufp, r, g, b); /* convert to pixels */ for (i = 0; i < width; i++) { pixels[i][0] = r[i]; pixels[i][1] = g[i]; pixels[i][2] = b[i]; } return(0);}/******************************************************************************/utah_read_rgb(ufp, r, g, b)UTAH_FILE *ufp;unsigned char r[], g[], b[];{ rle_pixel *rows[3]; /* set color channels */ rows[0] = r; rows[1] = g; rows[2] = b; /* read this row */ rle_getrow(ufp, rows); return(0);}/******************************************************************************/utah_write_close(ufp)UTAH_FILE *ufp;{ if (!ufp) return(-1); rle_puteof(ufp); return(0);}/******************************************************************************/UTAH_FILE *utah_write_init(fname, ht, wd)char *fname;int ht, wd;{ FILE *fp; UTAH_FILE *ufp; /* open output stream */ if (!strcmp(fname, "")) fp = stdout; else { if ((fp = fopen(fname, "w")) == NULL) return(NULL); } /* change the default rle_dflt_hdr struct to match what we need */ ufp = (UTAH_FILE *) malloc(sizeof(UTAH_FILE)); *ufp = rle_dflt_hdr; ufp->rle_file = fp; ufp->xmax = wd - 1; ufp->ymax = ht - 1; ufp->alpha = 0; /* No coverage (alpha) */ /* create the header in the output file */ rle_put_setup(ufp); /* normal termination */ return(ufp);}/******************************************************************************/utah_write_pixels(ufp, pixels)UTAH_FILE *ufp;unsigned char pixels[][3];{ static unsigned n = 0; static unsigned char *r = NULL, *g = NULL, *b = NULL; int i, width; /* allocate storage */ width = ufp->xmax + 1; if (width > n) { if (n > 0) { free((char *)r); free((char *)g); free((char *)b); } n = width; r = (unsigned char *) malloc(n * sizeof(unsigned char)); g = (unsigned char *) malloc(n * sizeof(unsigned char)); b = (unsigned char *) malloc(n * sizeof(unsigned char)); } /* convert to color channels */ for (i = 0; i < width; i++) { r[i] = pixels[i][0]; g[i] = pixels[i][1]; b[i] = pixels[i][2]; } /* write this row */ utah_write_rgb(ufp, r, g, b); return(0);}/******************************************************************************/utah_write_rgb(ufp, r, g, b)UTAH_FILE *ufp;unsigned char r[], g[], b[];{ rle_pixel *rows[3]; int width; /* set color channels */ rows[0] = r; rows[1] = g; rows[2] = b; /* write this row */ width = ufp->xmax - ufp->xmin + 1; rle_putrow(rows, width, ufp); return(0);}/******************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -