void ReadImage(fname, fimage, M, N, Q) char fname[200]; int ***fimage; int *M, *N, *Q; { int i,j; unsigned char *image; char header [100], *ptr; FILE *fd; if ((fd=fopen(fname,"r")) == NULL) { fprintf(stderr,"Can't open %s.\n",fname); exit(1); } fgets(header,100,fd); if ( (header[0]!=80) || /* 'P' */ (header[1]!=53) ) { /* '5' */ fprintf(stderr,"Image %s is not PGM.\n",fname); exit(1); } fgets(header,100,fd); while(header[0]=='#') fgets(header,100,fd); *M=strtol(header,&ptr,0); *N=atoi(ptr); fgets(header,100,fd); *Q=strtol(header,&ptr,0); image = (unsigned char *) malloc( ((*M)*(*N)) * sizeof(unsigned char)); *fimage=(int **)malloc( (*N) * sizeof(int *)); for(i=0; i < (*N); i++) (*fimage)[i]=(int *)malloc( (*M) * sizeof(int)); if (fread(image, (*M)*(*N), 1, fd) == 0) { fprintf(stderr,"Image %s is wrong size.\n",fname); exit(1); } /* Convert the unsigned characters to integers */ for(i=0; i < (*N); i++) for(j=0; j < (*M); j++) (*fimage)[i][j]=(int)image[i*(*M)+j]; free(image); fclose(fd); }