Main Page   Data Structures   File List   Data Fields   Globals  

img2epsf.c

Go to the documentation of this file.
00001 #include        "sadie.h"
00002 /*#include        <sys/time.h>*/
00003 #include        <stdio.h>
00004 
00005 /*-Copyright Information------------------------------------------------------*/
00006 /* Copyright (c) 1994 by the University of Arizona Digital Image Analysis Lab */
00007 /*----------------------------------------------------------------------------*/
00008 /*-General Information--------------------------------------------------------*/
00009 /*                                                                            */
00010 /*   This function writes an EPSF image to disk.                              */
00011 /*                                                                            */
00012 /*----------------------------------------------------------------------------*/
00013 /*-Interface Information------------------------------------------------------*/
00014 void
00015 IMG2EPSF (IMAGE * in,           /*  I   Pointer to the image.                            */
00016           char *name,           /*  I   String, containing the name of the disk file.    */
00017           short nbit            /*  I   Bits/pixel in disk file.                         */
00018 /*----------------------------------------------------------------------------*/
00019   )
00020 {
00021   static char hex[] =
00022     { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D',
00023 'E', 'F' };
00024   unsigned char *ptr = NULL, *data = NULL, cval;
00025   char msg[SLEN];
00026   short i, j, k, error;
00027   long nbytes;
00028   double factor, dval;
00029   time_t secs;
00030   struct tm *t;
00031   FILE *fp = NULL;
00032 
00033   if (TIMES)
00034     TIMING (T_IMG2EPSF);
00035   if (NAMES)
00036     {
00037       MESSAGE ('I', "");
00038       MESSAGE ('I', "IMG2EPSF");
00039       MESSAGE ('I', "");
00040       sprintf (msg, " Input image:               %s", in->text);
00041       MESSAGE ('I', msg);
00042       sprintf (msg, " Output disk file:          %s", name);
00043       MESSAGE ('I', msg);
00044       sprintf (msg, " Output format:             %d-bit EPSF", nbit);
00045       MESSAGE ('I', msg);
00046       MESSAGE ('I', " ...............");
00047     }
00048 
00049   /* check input */
00050   if (!CHECKIMG (in))
00051     {
00052       MESSAGE ('E', " Can't identify image.");
00053       goto the_end;
00054     }
00055 
00056   /* open image file */
00057   if (!(fp = fopen (name, "w")))
00058     {
00059       sprintf (msg, " Can't open file %s.", name);
00060       MESSAGE ('E', msg);
00061       goto the_end;
00062     }
00063 
00064   nbytes = max ((long) 4096, (long) 2 * (long) in->npix + (long) 1);
00065   if ((ptr = data =
00066        (unsigned char *) malloc (nbytes * sizeof (unsigned char))) == NULL)
00067     {
00068       MESSAGE ('E', " Memory request failed.");
00069       goto the_end;
00070     }
00071   secs = time (NULL);
00072   t = localtime (&secs);
00073 
00074   /* write image header to file */
00075   sprintf ((char *) ptr, "%%!PS-Adobe-3.0 EPSF-3.0\r");
00076   sprintf ((char *) ptr + strlen ((char *) ptr), "%%%%Creator: SADIE\r");
00077   sprintf ((char *) ptr + strlen ((char *) ptr), "%%%%Title: %s\r", name);
00078   sprintf ((char *) ptr + strlen ((char *) ptr),
00079            "%%%%CreationDate: %02d/%02d/%02d %02d:%02d\r", t->tm_mon,
00080            t->tm_mday, t->tm_year, t->tm_hour, t->tm_min);
00081   sprintf ((char *) ptr + strlen ((char *) ptr),
00082            "%%%%BoundingBox: 0 0 %d %d\r", in->npix, in->nlin);
00083   sprintf ((char *) ptr + strlen ((char *) ptr),
00084            "%%%%SuppressDotGainCompensation\r");
00085   if (in->nbnd != 3)
00086     {
00087       sprintf ((char *) ptr + strlen ((char *) ptr),
00088                "%%%%DocumentProcessColors: Black\r");
00089     }
00090   sprintf ((char *) ptr + strlen ((char *) ptr), "%%%%EndComments\r");
00091   sprintf ((char *) ptr + strlen ((char *) ptr), "%%%%BeginProlog\r");
00092   sprintf ((char *) ptr + strlen ((char *) ptr), "%%%%EndProlog\r");
00093   sprintf ((char *) ptr + strlen ((char *) ptr), "%%%%BeginSetup\r");
00094   sprintf ((char *) ptr + strlen ((char *) ptr), "%%%%EndSetup\r");
00095   sprintf ((char *) ptr + strlen ((char *) ptr),
00096            "%%ImageData: %d %d %d %d %d %d %d \"beginimage\"\r", in->npix,
00097            in->nlin, nbit, in->nbnd, in->nbnd == 3, in->npix, 1);
00098   if (in->nbnd != 3)
00099     {
00100       sprintf ((char *) ptr + strlen ((char *) ptr), "gsave\r");
00101       sprintf ((char *) ptr + strlen ((char *) ptr), "40 dict begin\r");
00102       sprintf ((char *) ptr + strlen ((char *) ptr),
00103                "/_image systemdict /image get def\r");
00104       sprintf ((char *) ptr + strlen ((char *) ptr),
00105                "/_setgray systemdict /setgray get def\r");
00106       sprintf ((char *) ptr + strlen ((char *) ptr),
00107                "/_currentgray systemdict /currentgray get def\r");
00108       sprintf ((char *) ptr + strlen ((char *) ptr),
00109                "/_settransfer systemdict /settransfer get def\r");
00110       sprintf ((char *) ptr + strlen ((char *) ptr),
00111                "/_currenttransfer systemdict /currenttransfer get def\r");
00112       sprintf ((char *) ptr + strlen ((char *) ptr),
00113                "/blank 0 _currenttransfer exec\r");
00114       sprintf ((char *) ptr + strlen ((char *) ptr),
00115                "1 _currenttransfer exec eq def\r");
00116       sprintf ((char *) ptr + strlen ((char *) ptr), "/negative blank\r");
00117       sprintf ((char *) ptr + strlen ((char *) ptr),
00118                "{0 _currenttransfer exec 0.5 lt}\r");
00119       sprintf ((char *) ptr + strlen ((char *) ptr),
00120                "{0 _currenttransfer exec 1 _currenttransfer exec gt}\r");
00121       sprintf ((char *) ptr + strlen ((char *) ptr), "ifelse def\r");
00122       sprintf ((char *) ptr + strlen ((char *) ptr),
00123                "/inverted? negative def\r");
00124       sprintf ((char *) ptr + strlen ((char *) ptr),
00125                "/level2 systemdict /languagelevel known\r");
00126       sprintf ((char *) ptr + strlen ((char *) ptr),
00127                "{languagelevel 2 ge} {false} ifelse def\r");
00128       sprintf ((char *) ptr + strlen ((char *) ptr), "gsave\r");
00129       sprintf ((char *) ptr + strlen ((char *) ptr), "/rows %d def\r",
00130                in->nlin);
00131       sprintf ((char *) ptr + strlen ((char *) ptr), "/cols %d def\r",
00132                in->npix);
00133       sprintf ((char *) ptr + strlen ((char *) ptr),
00134                "72 %ld mul %ld div dup cols mul exch rows mul scale\r",
00135                (long) in->nlin * (long) in->npix,
00136                (long) 72 * (long) in->nlin * (long) in->npix);
00137       sprintf ((char *) ptr + strlen ((char *) ptr), "level2 {\r");
00138       sprintf ((char *) ptr + strlen ((char *) ptr), "/DeviceGray\r");
00139       sprintf ((char *) ptr + strlen ((char *) ptr), "setcolorspace} if\r");
00140       sprintf ((char *) ptr + strlen ((char *) ptr),
00141                "/picstr1 %d string def\r", in->npix);
00142       sprintf ((char *) ptr + strlen ((char *) ptr),
00143                "/readdata {currentfile exch readhexstring pop} def\r");
00144       sprintf ((char *) ptr + strlen ((char *) ptr),
00145                "/image2 level2 {/image load def} {{begin\r");
00146       sprintf ((char *) ptr + strlen ((char *) ptr),
00147                "Width Height BitsPerComponent ImageMatrix\r");
00148       sprintf ((char *) ptr + strlen ((char *) ptr),
00149                "/DataSource load image end} def} ifelse\r");
00150       sprintf ((char *) ptr + strlen ((char *) ptr), "/beginimage {\r");
00151       sprintf ((char *) ptr + strlen ((char *) ptr), "image2\r");
00152       sprintf ((char *) ptr + strlen ((char *) ptr), "} def\r");
00153       sprintf ((char *) ptr + strlen ((char *) ptr), "12 dict begin\r");
00154       sprintf ((char *) ptr + strlen ((char *) ptr), "/ImageType 1 def\r");
00155       sprintf ((char *) ptr + strlen ((char *) ptr), "/Width cols def\r");
00156       sprintf ((char *) ptr + strlen ((char *) ptr), "/Height rows def\r");
00157       sprintf ((char *) ptr + strlen ((char *) ptr),
00158                "/ImageMatrix [cols 0 0 rows neg 0 rows] def\r");
00159       sprintf ((char *) ptr + strlen ((char *) ptr),
00160                "/BitsPerComponent %d def\r", nbit);
00161       sprintf ((char *) ptr + strlen ((char *) ptr), "/Decode [0 1] def\r");
00162       sprintf ((char *) ptr + strlen ((char *) ptr),
00163                "/DataSource {picstr1 readdata} def\r");
00164       sprintf ((char *) ptr + strlen ((char *) ptr), "currentdict end\r");
00165       sprintf ((char *) ptr + strlen ((char *) ptr),
00166                "%%%%BeginData: %ld ASCII Lines\r",
00167                (long) in->nlin + (long) 1);
00168       sprintf ((char *) ptr + strlen ((char *) ptr), "beginimage\r");
00169     }
00170   else
00171     {
00172       sprintf ((char *) ptr + strlen ((char *) ptr), "gsave\r");
00173       sprintf ((char *) ptr + strlen ((char *) ptr),
00174                "/hascolor /statusdict where {pop\r");
00175       sprintf ((char *) ptr + strlen ((char *) ptr),
00176                "statusdict /processcolors known\r");
00177       sprintf ((char *) ptr + strlen ((char *) ptr),
00178                "{statusdict /processcolors get exec 1 gt}\r");
00179       sprintf ((char *) ptr + strlen ((char *) ptr),
00180                "{false} ifelse} {false} ifelse def\r");
00181       sprintf ((char *) ptr + strlen ((char *) ptr), "40 dict begin\r");
00182       sprintf ((char *) ptr + strlen ((char *) ptr),
00183                "/_image systemdict /image get def\r");
00184       sprintf ((char *) ptr + strlen ((char *) ptr),
00185                "/_setgray systemdict /setgray get def\r");
00186       sprintf ((char *) ptr + strlen ((char *) ptr),
00187                "/_currentgray systemdict /currentgray get def\r");
00188       sprintf ((char *) ptr + strlen ((char *) ptr),
00189                "/_settransfer systemdict /settransfer get def\r");
00190       sprintf ((char *) ptr + strlen ((char *) ptr),
00191                "/_currenttransfer systemdict /currenttransfer get def\r");
00192       sprintf ((char *) ptr + strlen ((char *) ptr),
00193                "/blank 0 _currenttransfer exec\r");
00194       sprintf ((char *) ptr + strlen ((char *) ptr),
00195                "1 _currenttransfer exec eq def\r");
00196       sprintf ((char *) ptr + strlen ((char *) ptr), "/negative blank\r");
00197       sprintf ((char *) ptr + strlen ((char *) ptr),
00198                "{0 _currenttransfer exec 0.5 lt}\r");
00199       sprintf ((char *) ptr + strlen ((char *) ptr),
00200                "{0 _currenttransfer exec 1 _currenttransfer exec gt}\r");
00201       sprintf ((char *) ptr + strlen ((char *) ptr), "ifelse def\r");
00202       sprintf ((char *) ptr + strlen ((char *) ptr),
00203                "/inverted? negative def\r");
00204       sprintf ((char *) ptr + strlen ((char *) ptr),
00205                "/level2 systemdict /languagelevel known\r");
00206       sprintf ((char *) ptr + strlen ((char *) ptr),
00207                "{languagelevel 2 ge} {false} ifelse def\r");
00208       sprintf ((char *) ptr + strlen ((char *) ptr),
00209                "/foureq {4 index eq 8 1 roll\r");
00210       sprintf ((char *) ptr + strlen ((char *) ptr), "4 index eq 8 1 roll\r");
00211       sprintf ((char *) ptr + strlen ((char *) ptr), "4 index eq 8 1 roll\r");
00212       sprintf ((char *) ptr + strlen ((char *) ptr), "4 index eq 8 1 roll\r");
00213       sprintf ((char *) ptr + strlen ((char *) ptr),
00214                "pop pop pop pop and and and} def\r");
00215       sprintf ((char *) ptr + strlen ((char *) ptr),
00216                "hascolor {/band 0 def} {/band 5 def} ifelse\r");
00217       sprintf ((char *) ptr + strlen ((char *) ptr),
00218                "/setcmykcolor where {pop\r");
00219       sprintf ((char *) ptr + strlen ((char *) ptr),
00220                "1 0 0 0 setcmykcolor _currentgray 1 exch sub\r");
00221       sprintf ((char *) ptr + strlen ((char *) ptr),
00222                "0 1 0 0 setcmykcolor _currentgray 1 exch sub\r");
00223       sprintf ((char *) ptr + strlen ((char *) ptr),
00224                "0 0 1 0 setcmykcolor _currentgray 1 exch sub\r");
00225       sprintf ((char *) ptr + strlen ((char *) ptr),
00226                "0 0 0 1 setcmykcolor _currentgray 1 exch sub\r");
00227       sprintf ((char *) ptr + strlen ((char *) ptr), "4 {4 copy} repeat\r");
00228       sprintf ((char *) ptr + strlen ((char *) ptr),
00229                "1 0 0 0 foureq {/band 1 store} if\r");
00230       sprintf ((char *) ptr + strlen ((char *) ptr),
00231                "0 1 0 0 foureq {/band 2 store} if\r");
00232       sprintf ((char *) ptr + strlen ((char *) ptr),
00233                "0 0 1 0 foureq {/band 3 store} if\r");
00234       sprintf ((char *) ptr + strlen ((char *) ptr),
00235                "0 0 0 1 foureq {/band 4 store} if\r");
00236       sprintf ((char *) ptr + strlen ((char *) ptr),
00237                "0 0 0 0 foureq {/band 6 store} if} if\r");
00238       sprintf ((char *) ptr + strlen ((char *) ptr),
00239                "blank {/band 6 store} if\r");
00240       sprintf ((char *) ptr + strlen ((char *) ptr), "gsave\r");
00241       sprintf ((char *) ptr + strlen ((char *) ptr), "/rows %d def\r",
00242                in->nlin);
00243       sprintf ((char *) ptr + strlen ((char *) ptr), "/cols %d def\r",
00244                in->npix);
00245       sprintf ((char *) ptr + strlen ((char *) ptr),
00246                "72 %ld mul %ld div dup cols mul exch rows mul scale\r",
00247                (long) in->nlin * (long) in->npix,
00248                (long) 72 * (long) in->nlin * (long) in->npix);
00249       sprintf ((char *) ptr + strlen ((char *) ptr), "level2 {\r");
00250       sprintf ((char *) ptr + strlen ((char *) ptr), "band 0 eq {\r");
00251       sprintf ((char *) ptr + strlen ((char *) ptr),
00252                "[/CIEBasedABC 3 dict begin\r");
00253       sprintf ((char *) ptr + strlen ((char *) ptr),
00254                "/DecodeLMN [{1.8 exp} bind dup dup] def\r");
00255       sprintf ((char *) ptr + strlen ((char *) ptr), "/MatrixLMN [\r");
00256       sprintf ((char *) ptr + strlen ((char *) ptr),
00257                "0.4497 0.2446 0.0252\r");
00258       sprintf ((char *) ptr + strlen ((char *) ptr),
00259                "0.3163 0.6720 0.1412\r");
00260       sprintf ((char *) ptr + strlen ((char *) ptr),
00261                "0.1845 0.0833 0.9227\r");
00262       sprintf ((char *) ptr + strlen ((char *) ptr), "] def\r");
00263       sprintf ((char *) ptr + strlen ((char *) ptr),
00264                "/WhitePoint [0.9505 1 1.0891] def\r");
00265       sprintf ((char *) ptr + strlen ((char *) ptr), "currentdict end]\r");
00266       sprintf ((char *) ptr + strlen ((char *) ptr),
00267                "} {/DeviceGray} ifelse\r");
00268       sprintf ((char *) ptr + strlen ((char *) ptr), "setcolorspace} if\r");
00269       sprintf ((char *) ptr + strlen ((char *) ptr),
00270                "/picstr1 %d string def\r", in->npix);
00271       sprintf ((char *) ptr + strlen ((char *) ptr),
00272                "/picstr2 %d string def\r", in->npix);
00273       sprintf ((char *) ptr + strlen ((char *) ptr),
00274                "/picstr3 %d string def\r", in->npix);
00275       sprintf ((char *) ptr + strlen ((char *) ptr),
00276                "/picstr4 %d string def\r", in->npix);
00277       sprintf ((char *) ptr + strlen ((char *) ptr),
00278                "/readdata {currentfile exch readhexstring pop} def\r");
00279       sprintf ((char *) ptr + strlen ((char *) ptr),
00280                "/image2 level2 {/image load def} {{begin\r");
00281       sprintf ((char *) ptr + strlen ((char *) ptr),
00282                "Width Height BitsPerComponent ImageMatrix\r");
00283       sprintf ((char *) ptr + strlen ((char *) ptr), "Decode length 2 eq\r");
00284       sprintf ((char *) ptr + strlen ((char *) ptr),
00285                "{/DataSource load image} if\r");
00286       sprintf ((char *) ptr + strlen ((char *) ptr), "Decode length 6 eq\r");
00287       sprintf ((char *) ptr + strlen ((char *) ptr),
00288                "{DataSource 0 get DataSource 1 get DataSource 2 get\r");
00289       sprintf ((char *) ptr + strlen ((char *) ptr),
00290                "true 3 colorimage} if\r");
00291       sprintf ((char *) ptr + strlen ((char *) ptr), "Decode length 8 eq\r");
00292       sprintf ((char *) ptr + strlen ((char *) ptr),
00293                "{DataSource 0 get DataSource 1 get\r");
00294       sprintf ((char *) ptr + strlen ((char *) ptr),
00295                "DataSource 2 get DataSource 3 get\r");
00296       sprintf ((char *) ptr + strlen ((char *) ptr),
00297                "true 4 colorimage} if\r");
00298       sprintf ((char *) ptr + strlen ((char *) ptr), "end} def} ifelse\r");
00299       sprintf ((char *) ptr + strlen ((char *) ptr),
00300                "/_image2 level2 {/_image load def} {{begin\r");
00301       sprintf ((char *) ptr + strlen ((char *) ptr),
00302                "Width Height BitsPerComponent ImageMatrix\r");
00303       sprintf ((char *) ptr + strlen ((char *) ptr),
00304                "/DataSource load _image end} def} ifelse\r");
00305       sprintf ((char *) ptr + strlen ((char *) ptr), "/beginimage {\r");
00306       sprintf ((char *) ptr + strlen ((char *) ptr),
00307                "band 0 eq band 4 eq or band 5 eq or\r");
00308       sprintf ((char *) ptr + strlen ((char *) ptr), "{image2}\r");
00309       sprintf ((char *) ptr + strlen ((char *) ptr),
00310                "{negative {{pop 0}} {{pop 1}} ifelse\r");
00311       sprintf ((char *) ptr + strlen ((char *) ptr),
00312                "_settransfer _image2} ifelse\r");
00313       sprintf ((char *) ptr + strlen ((char *) ptr), "} def\r");
00314       sprintf ((char *) ptr + strlen ((char *) ptr), "12 dict begin\r");
00315       sprintf ((char *) ptr + strlen ((char *) ptr), "/ImageType 1 def\r");
00316       sprintf ((char *) ptr + strlen ((char *) ptr), "/Width cols def\r");
00317       sprintf ((char *) ptr + strlen ((char *) ptr), "/Height rows def\r");
00318       sprintf ((char *) ptr + strlen ((char *) ptr),
00319                "/ImageMatrix [cols 0 0 rows neg 0 rows] def\r");
00320       sprintf ((char *) ptr + strlen ((char *) ptr),
00321                "/BitsPerComponent %d def\r", nbit);
00322       sprintf ((char *) ptr + strlen ((char *) ptr), "band 0 eq\r");
00323       sprintf ((char *) ptr + strlen ((char *) ptr),
00324                "{/Decode [0 1 0 1 0 1] def\r");
00325       sprintf ((char *) ptr + strlen ((char *) ptr),
00326                "/MultipleDataSources true def\r");
00327       sprintf ((char *) ptr + strlen ((char *) ptr), "/DataSource [\r");
00328       sprintf ((char *) ptr + strlen ((char *) ptr), "{picstr1 readdata}\r");
00329       sprintf ((char *) ptr + strlen ((char *) ptr), "{picstr2 readdata}\r");
00330       sprintf ((char *) ptr + strlen ((char *) ptr),
00331                "{picstr3 readdata picstr4 readdata pop}\r");
00332       sprintf ((char *) ptr + strlen ((char *) ptr), "] def}\r");
00333       sprintf ((char *) ptr + strlen ((char *) ptr), "{/Decode [0 1] def\r");
00334       sprintf ((char *) ptr + strlen ((char *) ptr), "/DataSource {\r");
00335       sprintf ((char *) ptr + strlen ((char *) ptr),
00336                "picstr1 readdata pop\r");
00337       sprintf ((char *) ptr + strlen ((char *) ptr),
00338                "picstr2 readdata pop\r");
00339       sprintf ((char *) ptr + strlen ((char *) ptr),
00340                "picstr3 readdata pop\r");
00341       sprintf ((char *) ptr + strlen ((char *) ptr), "picstr4 readdata\r");
00342       sprintf ((char *) ptr + strlen ((char *) ptr), "} def}\r");
00343       sprintf ((char *) ptr + strlen ((char *) ptr), "ifelse\r");
00344       sprintf ((char *) ptr + strlen ((char *) ptr), "currentdict end\r");
00345       sprintf ((char *) ptr + strlen ((char *) ptr),
00346                "%%%%BeginData: %ld ASCII Lines\r",
00347                (long) 4 * (long) in->nlin + (long) 1);
00348       sprintf ((char *) ptr + strlen ((char *) ptr), "beginimage\r");
00349     }
00350   nbytes = (long) strlen ((char *) ptr);
00351   if (fwrite (ptr, nbytes, 1, fp) != 1)
00352     {
00353       sprintf (msg, " Can't write image header to file %s.", name);
00354       MESSAGE ('E', msg);
00355       goto the_end;
00356     }
00357 
00358   /* write image data to file */
00359   factor = 255.0 / (in->gmax - in->gmin);
00360   nbytes = (long) 2 *(long) in->npix + (long) 1;
00361   ptr[(long) 2 * (long) in->npix] = '\r';
00362   if (in->nbnd != 3)
00363     {
00364       for (j = 0; j < in->nlin; j += 1)
00365         {
00366           for (ptr = data, k = 0; k < in->npix; k += 1, ptr += 2)
00367             {
00368               dval = (in->data[0][j][k] - in->gmin) * factor;
00369               cval = (unsigned char) dval;
00370               ptr[0] = hex[(cval & 0xF0) >> 4];
00371               ptr[1] = hex[(cval & 0x0F)];
00372             }
00373           if (fwrite (data, nbytes, 1, fp) != 1)
00374             {
00375               sprintf (msg, " Can't write image data to file %s.", name);
00376               MESSAGE ('E', msg);
00377               goto the_end;
00378             }
00379         }
00380     }
00381   else
00382     {
00383       for (j = 0; j < in->nlin; j += 1)
00384         {
00385           for (i = 0; i < in->nbnd; i += 1)
00386             {
00387               for (ptr = data, k = 0; k < in->npix; k += 1, ptr += 2)
00388                 {
00389                   dval = (in->data[i][j][k] - in->gmin) * factor;
00390                   cval = (unsigned char) dval;
00391                   ptr[0] = hex[(cval & 0xF0) >> 4];
00392                   ptr[1] = hex[(cval & 0x0F)];
00393                 }
00394               if (fwrite (data, nbytes, 1, fp) != 1)
00395                 {
00396                   sprintf (msg, " Can't write image data to file %s.", name);
00397                   MESSAGE ('E', msg);
00398                   goto the_end;
00399                 }
00400             }
00401           for (ptr = data, k = 0; k < in->npix; k += 1, ptr += 2)
00402             {
00403               dval =
00404                 (in->data[0][j][k] - in->gmin) * factor * 0.30 +
00405                 (in->data[1][j][k] - in->gmin) * factor * 0.59 +
00406                 (in->data[2][j][k] - in->gmin) * factor * 0.11;
00407               cval = (unsigned char) rnd (dval);
00408               ptr[0] = hex[(cval & 0xF0) >> 4];
00409               ptr[1] = hex[(cval & 0x0F)];
00410             }
00411           if (fwrite (data, nbytes, 1, fp) != 1)
00412             {
00413               sprintf (msg, " Can't write image data to file %s.", name);
00414               MESSAGE ('E', msg);
00415               goto the_end;
00416             }
00417         }
00418     }
00419 
00420   /* write image trailer to file */
00421   sprintf ((char *) ptr, "%%%%EndData\r");
00422   sprintf ((char *) ptr + strlen ((char *) ptr), "grestore end\r");
00423   sprintf ((char *) ptr + strlen ((char *) ptr), "grestore\r");
00424   nbytes = (long) strlen ((char *) ptr);
00425   if (fwrite (ptr, nbytes, 1, fp) != 1)
00426     {
00427       sprintf (msg, " Can't write image trailer to file %s.", name);
00428       MESSAGE ('E', msg);
00429       goto the_end;
00430     }
00431 
00432   /* close image file */
00433 the_end:
00434   if (fp)
00435     {
00436       if (fclose (fp))
00437         {
00438           sprintf (msg, " Can't close file %s.", name);
00439           MESSAGE ('W', msg);
00440         }
00441     }
00442 
00443   if (data)
00444     free (data);
00445 
00446   if (TIMES)
00447     TIMING (T_EXIT);
00448 }

Generated on Sun May 18 15:36:11 2003 for tclSadie by doxygen1.3