This is HipsImage.c in view mode; [Download] [Up]
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "Mask.h" #include "HipsImage.h" int openImage(hipsImage *image) { int i,j,k; int sz; char *buf; if((buf = read_line(stdin,&sz)) == NULL) return 0; image->orig_name = (char *)malloc((strlen(buf)+1)*sizeof(char)); strcpy(image->orig_name,buf); if((buf = read_line(stdin,&sz)) == NULL) return 0; image->seq_name = (char *)malloc((strlen(buf)+1)*sizeof(char)); strcpy(image->seq_name,buf); if((buf = read_line(stdin,&sz)) == NULL) return 0; image->num_frame = atoi(buf); if((buf = read_line(stdin,&sz)) == NULL) return 0; image->orig_date = (char *)malloc((strlen(buf)+1)*sizeof(char)); strcpy(image->orig_date,buf); if((buf = read_line(stdin,&sz)) == NULL) return 0; image->rows = atoi(buf); if((buf = read_line(stdin,&sz)) == NULL) return 0; image->cols = atoi(buf); if((buf = read_line(stdin,&sz)) == NULL) return 0; image->bits_per_pixel = atoi(buf); if((buf = read_line(stdin,&sz)) == NULL) return 0; image->bit_packing = atoi(buf); if((buf = read_line(stdin,&sz)) == NULL) return 0; image->pixel_format = atoi(buf); image->seq_history = (char *)malloc(sizeof(char)); strcpy(image->seq_history,"\0"); image->seq_desc = (char *)malloc(sizeof(char)); strcpy(image->seq_desc,"\0"); if((buf = read_line(stdin,&sz)) == NULL) return 0; while (sz > 1 && buf[sz-1] == '|' && buf[sz] == '\\' ) { image->seq_history = (char *)realloc(image->seq_history,(strlen(image->seq_history)+sz+2)*sizeof(char)); image->seq_history = (char *)strcat(image->seq_history,buf); if((buf = read_line(stdin,&sz)) == NULL) return 0; } if(sz > 1) { image->seq_history = (char *)realloc(image->seq_history,(strlen(image->seq_history)+sz+2)*sizeof(char)); image->seq_history = (char *)strcat(image->seq_history,buf); if((buf = read_line(stdin,&sz)) == NULL) return 0; } while ( strcmp( buf, "." ) ) { image->seq_desc = (char *)realloc(image->seq_desc,(strlen(image->seq_desc)+sz+2)*sizeof(char)); image->seq_desc = (char *)strcat(image->seq_desc,buf); if((buf = read_line(stdin,&sz)) == NULL) return 0; } if(strcmp(buf,".")) return 0; image->data = (int *)malloc(image->rows*image->cols*sizeof(int)); switch(image->pixel_format) { case HIPS_PFBYTE: if(image->bits_per_pixel != 8) return 0; if(image->bit_packing != 0) return 0; break; default: return 0; } k=0; for(i=0;i<image->rows;i++) { for(j=0;j<image->cols;j++) { image->data[k] = fgetc(stdin); k++; } } return 1; } void writeHeader(hipsImage *image) { printf("%s\n",image->orig_name); printf("%s\n",image->seq_name); printf("%d\n",image->num_frame); printf("%s\n",image->orig_date); printf("%d\n",image->rows); printf("%d\n",image->cols); printf("%d\n",image->bits_per_pixel); printf("%d\n",image->bit_packing); printf("%d\n",image->pixel_format); printf("%s\n",image->seq_history); printf("%s\n",image->seq_desc); printf(".\n"); } int saveImage(hipsImage *image) { int i; char fullPath[500]; writeHeader(image); for(i=0;i<image->rows*image->cols;i++) putchar(image->data[i]); return 1; } hipsImage *copyImage(hipsImage *src) { hipsImage *new; new = (hipsImage *)malloc(sizeof(hipsImage)); new->orig_name = getorig_name(src); new->seq_name = getseq_name(src); new->num_frame = getnum_frame(src); new->orig_date = getorig_date(src); new->rows = getrows(src); new->cols = getcols(src); new->bits_per_pixel = getbits_per_pixel(src); new->bit_packing = getbit_packing(src); new->pixel_format = getpixel_format(src); new->seq_history = getseq_history(src); new->seq_desc = getseq_desc(src); new->data = getdata(src); return new; } void convolveImage(hipsImage *image, mask *m) { int i,j,mx,my,dx,dy,r,c,k; int mrows,mcols,msize; float min,max; float **cd,**d; mrows = mcols = msize = m->size; d = getfdata(image, &r,&c); cd = (float **)malloc(r*c*sizeof(float *)); for(k=0;k<r;k++) cd[k] = (float *)malloc(c*sizeof(float)); max = -37267.0; min = 37267.0; for(i=0;i<r;i++) { for(j=0;j<c;j++) { cd[i][j] = 0.0; for(mx=0, dx=i-msize/2; mx<mrows; mx++, dx++) { for(my=0, dy=j-msize/2; my<mcols; my++, dy++) { if(dx >= 0 && dy >= 0 && dx < r && dy < c) cd[i][j] += m->data[mx][my]*d[dx][dy]; } } if(cd[i][j] > max) max = cd[i][j]; if(cd[i][j] < min) min = cd[i][j]; } } k=0; for(i=0;i<r;i++) { for(j=0;j<c;j++) { image->data[k] = (int)(255.0*(cd[i][j] - min)/(max - min)); k++; } } } void threshImage(hipsImage *image, int l, int h) { int i,j,k; k=0; for(i=0;i<image->rows;i++) for(j=0;j<image->cols;j++) { if(image->data[k] >= l && image->data[k] <= h) image->data[k] = 255; else image->data[k] = 0; k++; } } void invertImage(hipsImage *image) { int i,j,k; k=0; for(i=0;i<image->rows;i++) for(j=0;j<image->cols;j++) { image->data[k] = 255 - image->data[k]; k++; } } char *getorig_name(hipsImage *image) { char *on; on = (char *)malloc((strlen(image->orig_name)+1)*sizeof(char)); strcpy(on,image->orig_name); return(on); } char *getseq_name(hipsImage *image) { char *sn; sn = (char *)malloc((strlen(image->seq_name)+1)*sizeof(char)); strcpy(sn,image->seq_name); return(sn); } int getnum_frame(hipsImage *image) { return(image->num_frame); } char *getorig_date(hipsImage *image) { char *od; od = (char *)malloc((strlen(image->orig_date)+1)*sizeof(char)); strcpy(od,image->orig_date); return(od); } int getrows(hipsImage *image) { return(image->rows); } int getcols(hipsImage *image) { return(image->cols); } int getbits_per_pixel(hipsImage *image) { return(image->bits_per_pixel); } int getbit_packing(hipsImage *image) { return(image->bit_packing); } int getpixel_format(hipsImage *image) { return(image->pixel_format); } char *getseq_history(hipsImage *image) { char *sh; sh = (char *)malloc((strlen(image->seq_history)+1)*sizeof(char)); strcpy(sh,image->seq_history); return(sh); } char *getseq_desc(hipsImage *image) { char *sd; sd = (char *)malloc((strlen(image->seq_desc)+1)*sizeof(char)); strcpy(sd,image->seq_desc); return(sd); } int *getdata(hipsImage *image) { int *d; int i,r,c; r = image->rows; c = image->cols; d = (int *)malloc(r*c*sizeof(int)); for(i=0;i<r*c;i++) d[i] = image->data[i]; return(d); } float **getfdata(hipsImage *image, int *theRows, int *theCols) { int r,c,k; int ival; float **fdata; r = *theRows = image->rows; c = *theCols = image->cols; fdata = (float **)malloc(r*sizeof(float *)); for(k=0;k<r;k++) fdata[k] = (float *)malloc(c*sizeof(float)); for(k=0;k<r*c;k++) fdata[k/r][k%c] = (float)image->data[k]; return fdata; } char *read_line(FILE *fp,int *size) { int i=0, c; char buf[5000]; c = fgetc(fp); while( (c != '\n') && !feof(fp) && (i < 5000)) { buf[i++] = c; c = fgetc(fp); } if(!i) { buf[0] = ' '; buf[1] = '\0'; } else buf[i] = '\0'; if(feof(fp)) return NULL; *size = strlen(buf); return(buf); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.