/* * Module: pbmtools * * Functions for reading/writing .pbm files and pixel * manipulation. * * Author: * Stuart Inglis (singlis@internz.co.nz) * (c) 1998 * */ #include #include #include #include "marklist.h" #include "pbmtools.h" #include "utils.h" void pbm_putpixel_range(Pixel **bitmap,int c,int r,int val, int cols, int rows) { if(((c)>=0)&&((c)=0)&&((r)=0)&&((c)=0)&&((r)0) && (rows>=0)) for(r=0;r>j); } buf[c/8]=ii; } fwrite(buf,1,(cols+7)/8,fp); } free(buf); if(ferror(fp)){ fprintf(stderr,"pbm_writefile: error occured while writing file.\n"); return ; } } /* Writes a pbm file given a file pointer and bitmap. Assumes that fp is already open, and keeps in that way. usage: pbm_writefile(fp,bitmap,cols,rows); */ void pbm_writefile_xy(FILE *fp,Pixel **bitmap, int x, int y,int cols, int rows, int resolution) { int r,c,ii=0,j; unsigned char *buf; buf=(unsigned char*)malloc(((cols+14)/8)*sizeof(unsigned char)); fprintf(fp,"%s\n","P4"); if(resolution) fprintf(fp,"# resolution: %d\n",resolution); fprintf(fp,"%d %d\n",cols,rows); if((cols>0) && (rows>=0)) for(r=0;r>j); } buf[c/8]=ii; } fwrite(buf,1,(cols+7)/8,fp); } free(buf); if(ferror(fp)){ fprintf(stderr,"pbm_writefile: error occured while writing file.\n"); return ; } } /* works best is cols is >= rows, and iterate x faster than y */ int **pgm_alloc(int cols, int rows) { int **p; /* int i;*/ CALLOC_2D(p,rows,cols,int); return p; } void pgm_free(int ***image,int rows) { /* int r;*/ FREE_2D(*image,rows); /* for(r=0;r