00001 #include "sadie.h"
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 void GRAYSCAL (
00013 short nlin,
00014 short npix,
00015 short nlev,
00016 PIXEL gmin,
00017 PIXEL gmax,
00018 IMAGE **out
00019
00020 ) { register short j, k;
00021 char msg[SLEN];
00022 double inc=(nlev<=1 ? 0.0:(double)(gmax-gmin)/(double)(nlev-1));
00023
00024 if (TIMES) TIMING(T_GRAYSCAL);
00025 if (NAMES) {
00026 MESSAGE('I',"");
00027 MESSAGE('I',"GRAYSCAL");
00028 MESSAGE('I',"");
00029 sprintf(msg," Image size: lines: %d",nlin);
00030 MESSAGE('I',msg);
00031 sprintf(msg," pixels: %d",npix);
00032 MESSAGE('I',msg);
00033 sprintf(msg," Minimum graylevel: %12.4e",gmin);
00034 MESSAGE('I',msg);
00035 sprintf(msg," Maximum graylevel: %12.4e",gmax);
00036 MESSAGE('I',msg);
00037 sprintf(msg," Number of graylevels: %d",nlev);
00038 MESSAGE('I',msg);
00039 MESSAGE('I'," ...............");
00040 }
00041
00042
00043 if (nlin <= 0) {
00044 MESSAGE('E'," Number of lines must be greater than zero.");
00045 goto the_end;
00046 } else if (npix <= 0) {
00047 MESSAGE('E'," Number of pixels/line must be greater than zero.");
00048 goto the_end;
00049 } else if (nlev <= 0) {
00050 MESSAGE('E'," Number of graylevels must be greater than zero.");
00051 goto the_end;
00052 } else if (nlev > npix) {
00053 MESSAGE('E'," Number of graylevels must be less than or equal to number of pixels/line.");
00054 goto the_end;
00055 } else if (gmin > gmax) {
00056 MESSAGE('E', " Minimum graylevel value must be less than or equal to maximum graylevel value.");
00057 goto the_end;
00058 }
00059
00060
00061 if (!CHECKIMG(*out)) GETMEM(1,nlin,npix,out);
00062 if (!*out) goto the_end;
00063
00064
00065 for (k=0; k<npix; k++) {
00066 (*out)->data[0][0][k] = (PIXEL)((double)gmin+(double)((long)k*(long)nlev/(long)npix)*inc);
00067 }
00068 for (j=1; j<nlin; j++) {
00069 for (k=0; k<npix; k++) {
00070 (*out)->data[0][j][k] = (*out)->data[0][0][k];
00071 }
00072 }
00073 (*out)->gmin = gmin;
00074 (*out)->gmax = gmax;
00075
00076 the_end:
00077 if (TIMES) TIMING(T_EXIT);
00078 }