home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / octa21fs.zip / octave / pnm / SImage / scaleimg.c < prev    next >
C/C++ Source or Header  |  2000-01-15  |  18KB  |  654 lines

  1. /* written by Stefan Mueller stm@fgan.de 1996 */
  2.  
  3. /* scaleimg is a filter */
  4. /* the input on stdin is a output of pnmtops image postscript-file */
  5. /* the ouput on stdout is a eps file with scaled image */
  6. #include <stdio.h>
  7. #define TEXT_LENGTH 256
  8. #define SCALE_FONT_SIZE 10 
  9.  
  10. const char * h1="%%!PS-Adobe-2.0 EPSF-2.0\n";
  11. const char * h2="%%%%Creator: scaleimg stm@fgan.de 1996\n";
  12. const char * h3="%%%%DocumentFonts: Helvetica Times-Roman\n";
  13. const char * h4="%%%%BoundingBox: %d %d %d %d\n";
  14. const char * h5="%%%%EndComments\n";
  15. const char * h6="/readstring {\n";
  16. const char * h7="currentfile exch readhexstring pop\n";
  17. const char * h8="} bind def\n";
  18. const char * h9="/picstr %d string def\n";
  19. const char * h10="/rpicstr %d string def\n";
  20. const char * h11="/gpicstr %d string def\n";
  21. const char * h12="/bpicstr %d string def\n";
  22. const char * h13="%%%%EndProlog\n";
  23. const char * mt="%d %d moveto\n";
  24. const char * mtf="%1.1f %1.1f moveto\n";
  25. const char * rmt="%d %d rmoveto\n";
  26. const char * lt="%d %d lineto\n";
  27. const char * rlt="%d %d rlineto\n";
  28. const char * np="newpath\n";
  29. const char * cp="closepath\n";
  30. const char * sh="(%s) show\n";
  31. const char * shc="(%s) dup stringwidth pop dup 2 div sub neg 0 rmoveto show\n";
  32. const char * shr="(%s) dup stringwidth pop neg 0 rmoveto show\n";
  33. const char * slw="%d setlinewidth\n";
  34. const char * st="stroke\n";
  35. const char * sp="showpage\n";
  36. const char * gs="gsave\n";
  37. const char * gr="grestore\n";
  38. const char * sc="%1.2f %1.2f scale\n";
  39. const char * tl="%d %d translate\n";
  40. const char * rt="%d rotate\n";
  41. const char * f1="/Helvetica findfont %d scalefont setfont\n";
  42. const char * f2="/Times-Roman findfont %d scalefont setfont\n";
  43. const char *suchScale="cale\n";
  44. const char *suchTranslate="late\n";
  45. const char *suchGrestore="tore\n";
  46.  
  47. void error()
  48.   {
  49.   fprintf(stderr,"Usage: scaleimg <options>\n");
  50.   fprintf(stderr,"options:\n");
  51.   fprintf(stderr,"    -fw <size>            frame size on the westside of image\n");
  52.   fprintf(stderr,"    -fe <size>            frame size on the eastside of image\n");
  53.   fprintf(stderr,"    -fn <size>            frame size on the northside of image\n");
  54.   fprintf(stderr,"    -fs <size>            frame size on the southside of image\n");
  55.   fprintf(stderr,"    -ix <position>        x position of sw-corner of image\n");
  56.   fprintf(stderr,"    -iy <position>        y position of sw-corner of image\n");
  57.   fprintf(stderr,"    -iw <size>            width of image\n");
  58.   fprintf(stderr,"    -ih <size>            height image\n");
  59.   fprintf(stderr,"    -x0 <value>           start value of x scale\n");
  60.   fprintf(stderr,"    -xn <value>           end value of x scale\n");
  61.   fprintf(stderr,"    -y0 <value>           start value of y scale\n");
  62.   fprintf(stderr,"    -yn <value>           end value of y scale\n");
  63.   fprintf(stderr,"    -ls <text>            text of south-label (x-axis)\n");
  64.   fprintf(stderr,"    -lw <text>            text of west-label (y-axis)\n");
  65.   fprintf(stderr,"    -ln <text>            text of north-label\n");
  66.   fprintf(stderr,"    -le <text>            text of east-label\n");
  67.   fprintf(stderr,"    -lt <text>            text of title-label\n");
  68.   fprintf(stderr,"    -ll <text>            text of legend-label\n");
  69.   exit(0);
  70.   }
  71.  
  72. void drawFrame(int x,int y,int width,int height,int lineWidth)
  73.   {
  74.   printf(np);
  75.   printf(mt,x,y);
  76.   printf(rlt,width,0);
  77.   printf(rlt,0,height);
  78.   printf(rlt,-width,0);
  79.   printf(rlt,0,-height);
  80.   printf(cp);
  81.   printf(slw,lineWidth);
  82.   printf(st);
  83.   }
  84.  
  85. void getTicDistance(float axisLength,short maxTics,float *size) 
  86. {
  87. float currentTics; 
  88. float factor[3]; 
  89. float exponent; 
  90. int i;
  91.  
  92. if (maxTics<2) maxTics=2;
  93. factor[0]=5.0;
  94. factor[1]=2.0;
  95. factor[2]=1.0;
  96. exponent=1.0;
  97. if (axisLength<0) axisLength*=-1.0;
  98. while (axisLength>=1.0)
  99.   {
  100.   axisLength/=10.0;
  101.   exponent*=10.0;
  102.   }
  103. i=2;
  104. do
  105.   {
  106.   *size=factor[i];
  107.   i++;
  108.   if (i>2) i=0;
  109.   factor[i]/=10.0;
  110.   currentTics=axisLength/factor[i];
  111.   }
  112. while (currentTics<=maxTics);
  113. *size*=exponent;
  114. }
  115.  
  116. void drawSouthScale(int x,int y,int length,float
  117.   startValue,float endValue,int xValueFormat)
  118.   {
  119.   float xFac;
  120.   float sign;
  121.   float xValue;
  122.   float deltaXTic;
  123.   float deltaXLabel;
  124.   float startEndDiff;
  125.   float currentX;
  126.   float currentY;
  127.   char text[TEXT_LENGTH];
  128.   char form[TEXT_LENGTH];
  129.   int i;
  130.   
  131.   startEndDiff=endValue-startValue;
  132.   if (startEndDiff<0) sign=-1.0;
  133.     else sign=1.0;
  134.   getTicDistance(sign*startEndDiff,7,&deltaXLabel); 
  135.   xFac=length/startEndDiff;
  136.   deltaXTic=sign*deltaXLabel/5;
  137.   xValue=startValue;
  138.   i=0;
  139.   currentY=y;
  140.   while (sign*xValue<sign*(endValue+deltaXTic/10))
  141.     {
  142.     currentX=x+xFac*(xValue-startValue);
  143.     if (i%5)
  144.       {
  145.       /* short tics */
  146.       printf(np);
  147.       printf(mtf,currentX,currentY);
  148.       printf(rlt,0,-5);
  149.       printf(slw,1);
  150.       printf(st);
  151.       }
  152.     else 
  153.       {
  154.       /* long tics */
  155.       printf(np);
  156.       printf(mtf,currentX,currentY);
  157.       printf(rlt,0,-10);
  158.       printf(slw,1);
  159.       printf(rmt,0,-11);
  160.       printf(f1,SCALE_FONT_SIZE);
  161.       sprintf(form,"%%1.%df",xValueFormat);
  162.       sprintf(text,form,xValue);
  163.       printf(shc,text);
  164.       printf(st);
  165.       }
  166.       
  167.     xValue+=deltaXTic;
  168.     i++;
  169.     }
  170.   }
  171.  
  172. void drawNorthScale(int x,int y,int length,
  173.   float startValue,float endValue,int xValueFormat)
  174.   {
  175.   float xFac;
  176.   float sign;
  177.   float xValue;
  178.   float deltaXTic;
  179.   float deltaXLabel;
  180.   float startEndDiff;
  181.   float currentX;
  182.   float currentY;
  183.   char text[TEXT_LENGTH];
  184.   char form[TEXT_LENGTH];
  185.   int i;
  186.   
  187.   startEndDiff=endValue-startValue;
  188.   if (startEndDiff<0) sign=-1.0;
  189.     else sign=1.0;
  190.   getTicDistance(sign*startEndDiff,7,&deltaXLabel); 
  191.   xFac=length/startEndDiff;
  192.   deltaXTic=sign*deltaXLabel/5;
  193.   xValue=startValue;
  194.   i=0;
  195.   currentY=y;
  196.   while (sign*xValue<sign*(endValue+deltaXTic/10))
  197.     {
  198.     currentX=x+xFac*(xValue-startValue);
  199.     if (i%5)
  200.       {
  201.       /* short tics */
  202.       printf(np);
  203.       printf(mtf,currentX,currentY);
  204.       printf(rlt,0,5);
  205.       printf(slw,1);
  206.       printf(st);
  207.       }
  208.     else 
  209.       {
  210.       /* long tics */
  211.       printf(np);
  212.       printf(mtf,currentX,currentY);
  213.       printf(rlt,0,10);
  214.       printf(slw,1);
  215.       printf(rmt,0,3);
  216.       printf(f1,SCALE_FONT_SIZE);
  217.       sprintf(form,"%%1.%df",xValueFormat);
  218.       sprintf(text,form,xValue);
  219.       printf(shc,text);
  220.       printf(st);
  221.       }
  222.       
  223.     xValue+=deltaXTic;
  224.     i++;
  225.     }
  226.   }
  227.  
  228. void drawWestScale(int x,int y,int length,
  229.   float startValue,float endValue,int yValueFormat)
  230.   {
  231.   float yFac;
  232.   float sign;
  233.   float yValue;
  234.   float deltaYTic;
  235.   float deltaYLabel;
  236.   float startEndDiff;
  237.   float currentX;
  238.   float currentY;
  239.   char text[TEXT_LENGTH];
  240.   char form[TEXT_LENGTH];
  241.   int i;
  242.   
  243.   startEndDiff=endValue-startValue;
  244.   if (startEndDiff<0) sign=-1.0;
  245.     else sign=1.0;
  246.   getTicDistance(sign*startEndDiff,7,&deltaYLabel); 
  247.   yFac=length/startEndDiff;
  248.   deltaYTic=sign*deltaYLabel/5;
  249.   yValue=startValue;
  250.   i=0;
  251.   currentX=x;
  252.   while (sign*yValue<sign*(endValue+deltaYTic/10))
  253.     {
  254.     currentY=y+yFac*(yValue-startValue);
  255.     if (i%5)
  256.       {
  257.       /* short tics */
  258.       printf(np);
  259.       printf(mtf,currentX,currentY);
  260.       printf(rlt,-5,0);
  261.       printf(slw,1);
  262.       printf(st);
  263.       }
  264.     else 
  265.       {
  266.       /* long tics */
  267.       printf(np);
  268.       printf(mtf,currentX,currentY);
  269.       printf(rlt,-10,0);
  270.       printf(slw,1);
  271.       printf(rmt,-3,-3); 
  272.       printf(f1,SCALE_FONT_SIZE);
  273.       sprintf(form,"%%1.%df",yValueFormat);
  274.       sprintf(text,form,yValue);
  275.       printf(shr,text); 
  276.       printf(st);
  277.       }
  278.       
  279.     yValue+=deltaYTic;
  280.     i++;
  281.     }
  282.   }
  283.  
  284. void drawEastScale(int x,int y,int length,
  285.   float startValue,float endValue,int yValueFormat)
  286.   {
  287.   float yFac;
  288.   float sign;
  289.   float yValue;
  290.   float deltaYTic;
  291.   float deltaYLabel;
  292.   float startEndDiff;
  293.   float currentX;
  294.   float currentY;
  295.   char text[TEXT_LENGTH];
  296.   char form[TEXT_LENGTH];
  297.   int i;
  298.   
  299.   startEndDiff=endValue-startValue;
  300.   if (startEndDiff<0) sign=-1.0;
  301.     else sign=1.0;
  302.   getTicDistance(sign*startEndDiff,7,&deltaYLabel); 
  303.   yFac=length/startEndDiff;
  304.   deltaYTic=sign*deltaYLabel/5;
  305.   yValue=startValue;
  306.   i=0;
  307.   currentX=x;
  308.   while (sign*yValue<sign*(endValue+deltaYTic/10))
  309.     {
  310.     currentY=y+yFac*(yValue-startValue);
  311.     if (i%5)
  312.       {
  313.       /* short tics */
  314.       printf(np);
  315.       printf(mtf,currentX,currentY);
  316.       printf(rlt,5,0);
  317.       printf(slw,1);
  318.       printf(st);
  319.       }
  320.     else 
  321.       {
  322.       /* long tics */
  323.       printf(np);
  324.       printf(mtf,currentX,currentY);
  325.       printf(rlt,10,0);
  326.       printf(slw,1);
  327.       printf(rmt,3,-3);
  328.       printf(f1,SCALE_FONT_SIZE);
  329.       sprintf(form,"%%1.%df",yValueFormat);
  330.       sprintf(text,form,yValue);
  331.       printf(sh,text);
  332.       printf(st);
  333.       }
  334.       
  335.     yValue+=deltaYTic;
  336.     i++;
  337.     }
  338.   }
  339.  
  340. void drawLegendScale(int x,int y,int length,
  341.   int nColor,float startValue,float endValue,int yValueFormat)
  342.   {
  343.   float yFac;
  344.   float sign;
  345.   float yValue;
  346.   float deltaYTic;
  347.   float deltaYLabel;
  348.   float startEndDiff;
  349.   float currentX;
  350.   float currentY;
  351.   char text[TEXT_LENGTH];
  352.   char form[TEXT_LENGTH];
  353.   int i;
  354.   
  355.   startEndDiff=endValue-startValue;
  356.   if (startEndDiff<0) sign=-1.0;
  357.     else sign=1.0;
  358.   getTicDistance(sign*startEndDiff,7,&deltaYLabel); 
  359.   deltaYLabel=sign*startEndDiff/nColor;
  360.   deltaYTic=sign*deltaYLabel/2;
  361.   yFac=length/startEndDiff;
  362.   yValue=startValue;
  363.   i=0;
  364.   currentX=x;
  365.   while (sign*yValue<sign*(endValue+deltaYTic/10))
  366.     {
  367.     currentY=y+yFac*(yValue-startValue);
  368.     if (i%2)
  369.       {
  370.       /* label */
  371.       printf(mtf,currentX,currentY);
  372.       printf(rmt,3,-3);
  373.       printf(f1,SCALE_FONT_SIZE);
  374.       if (sign>0) sprintf(form,">%%1.%df",yValueFormat);
  375.       else        sprintf(form,"<%%1.%df",yValueFormat); 
  376.       sprintf(text,form,yValue-deltaYTic);
  377.       printf(sh,text);
  378.       }
  379.     else 
  380.       {
  381.       /* long tics */
  382.       printf(np);
  383.       printf(mtf,currentX,currentY);
  384.       printf(rlt,10,0);
  385.       printf(slw,1);
  386.       printf(st);
  387.       }
  388.       
  389.     yValue+=deltaYTic;
  390.     i++;
  391.     }
  392.   }
  393.       
  394. void  printLabel(int x,int y,int rotation,char *text,int size)
  395.   {
  396.   printf(mt,x,y);
  397.   printf(f2,size);
  398.   printf(rt,rotation); 
  399.   printf(shc,text);
  400.   printf(st);
  401.   printf(rt,-rotation); 
  402.   }
  403.   
  404.   
  405.  
  406. main(int argc,char **argv)
  407.   {
  408.   int frameSizeWest=0;
  409.   int frameSizeEast=0;
  410.   int frameSizeNorth=0;
  411.   int frameSizeSouth=0;
  412.   int imagePosX=55;
  413.   int imagePosY=200;
  414.   int imageWidth=350;
  415.   int imageHeight=350;
  416.   float xStartValue=-100.0;
  417.   float xEndValue=100.0;
  418.   int xValueFormat;
  419.   float yStartValue=-100.0;
  420.   float yEndValue=100.0;
  421.   int yValueFormat;
  422.   char labelSouth[TEXT_LENGTH]="";
  423.   char labelWest[TEXT_LENGTH]="";
  424.   char labelEast[TEXT_LENGTH]="";
  425.   char labelNorth[TEXT_LENGTH]="";
  426.   char labelTitle[TEXT_LENGTH]="";
  427.   char labelLegend[TEXT_LENGTH]="";
  428.   int imageNCols;
  429.   int imageNRows;
  430.   int imageDepth;
  431.   char c;
  432.   int i,j;
  433.   int scan;
  434.   if (argc==1) error();
  435.   if (argc%2==0) error();  
  436.   for (i=1;i<argc;i+=2) {
  437.     if (!strcmp("-fw",argv[i])) 
  438.       if (1!=sscanf(argv[i+1],"%d",&frameSizeWest)) error();
  439.       else;
  440.     else
  441.       if (!strcmp("-fe",argv[i])) 
  442.         if (1!=sscanf(argv[i+1],"%d",&frameSizeEast)) error();
  443.         else;
  444.       else
  445.         if (!strcmp("-fn",argv[i]))
  446.           if (1!=sscanf(argv[i+1],"%d",&frameSizeNorth)) error();
  447.           else;
  448.         else
  449.           if (!strcmp("-fs",argv[i]))
  450.             if (1!=sscanf(argv[i+1],"%d",&frameSizeSouth)) error();
  451.             else;
  452.           else
  453.             if (!strcmp("-ix",argv[i])) 
  454.               if (1!=sscanf(argv[i+1],"%d",&imagePosX)) error();
  455.               else;
  456.             else
  457.               if (!strcmp("-iy",argv[i])) 
  458.                 if (1!=sscanf(argv[i+1],"%d",&imagePosY)) error();
  459.                 else;
  460.               else
  461.                 if (!strcmp("-iw",argv[i]))
  462.                   if (1!=sscanf(argv[i+1],"%d",&imageWidth)) error();
  463.                   else;
  464.                 else
  465.                   if (!strcmp("-ih",argv[i]))
  466.                     if (1!=sscanf(argv[i+1],"%d",&imageHeight)) error();
  467.                     else;
  468.                    else
  469.                      if (!strcmp("-x0",argv[i]))
  470.                        if (1!=sscanf(argv[i+1],"%f",&xStartValue)) error();
  471.                        else {
  472.                          j=0;
  473.                          while((argv[i+1][j]!='.')&&(argv[i+1][j]!='\0'))
  474.                            j++;
  475.                          xValueFormat=0;
  476.                          if (argv[i+1][j]=='.') j++;
  477.                          while(argv[i+1][j]!='\0') {
  478.                            xValueFormat++;
  479.                            j++;
  480.                            }
  481.                          } 
  482.                      else
  483.                        if (!strcmp("-xn",argv[i]))
  484.                          if (1!=sscanf(argv[i+1],"%f",&xEndValue)) error();
  485.                          else;
  486.                        else
  487.                          if (!strcmp("-y0",argv[i]))
  488.                            if (1!=sscanf(argv[i+1],"%f",&yStartValue)) error();
  489.                            else {
  490.                              j=0;
  491.                              while((argv[i+1][j]!='.')&&(argv[i+1][j]!='\0'))
  492.                                j++;
  493.                              yValueFormat=0;
  494.                              if (argv[i+1][j]=='.') j++;
  495.                              while(argv[i+1][j]!='\0') {
  496.                                yValueFormat++;
  497.                                j++;
  498.                                }
  499.                              } 
  500.                          else
  501.                            if (!strcmp("-yn",argv[i]))
  502.                              if (1!=sscanf(argv[i+1],"%f",&yEndValue)) error();
  503.                              else; 
  504.                            else
  505.                              if (!strcmp("-lw",argv[i]))
  506.                                strcpy(labelWest,argv[i+1]);
  507.                              else
  508.                                if (!strcmp("-le",argv[i]))
  509.                                  strcpy(labelEast,argv[i+1]);
  510.                                else
  511.                                  if (!strcmp("-ln",argv[i]))
  512.                                    strcpy(labelNorth,argv[i+1]);
  513.                                  else
  514.                                    if (!strcmp("-ls",argv[i]))
  515.                                      strcpy(labelSouth,argv[i+1]);
  516.                                    else
  517.                                      if (!strcmp("-lt",argv[i]))
  518.                                        strcpy(labelTitle,argv[i+1]);
  519.                                      else
  520.                                        if (!strcmp("-ll",argv[i]))
  521.                                          strcpy(labelLegend,argv[i+1]);
  522.     } /* of for */
  523.  
  524.   scan=1;
  525.  
  526.   while (scan)
  527.     {
  528.     c=getchar(); 
  529.     if(c==suchScale[0]) {
  530.       c=getchar(); 
  531.       if(c==suchScale[1]) {
  532.         c=getchar(); 
  533.         if(c==suchScale[2]) {
  534.           c=getchar(); 
  535.           if(c==suchScale[3]) {
  536.             c=getchar(); 
  537.             if(c==suchScale[4]) {
  538.               scan=0;
  539.               }
  540.             }
  541.           }
  542.         }
  543.       }
  544.     }      
  545.   scanf("%d",&imageNCols);
  546.   if (imageNCols==0)
  547.     {
  548.     do c=getchar(); while (c!='\n');
  549.     scanf("%d %d %d\n",&imageNCols,&imageNRows,&imageDepth);
  550.     }
  551.   else
  552.     {
  553.     scanf(" %d %d\n",&imageNRows,&imageDepth);
  554.     }
  555.   /* print head */
  556.   printf(h1);
  557.   printf(h2);
  558.   printf(h4,imagePosX-frameSizeWest,imagePosY-frameSizeSouth,
  559.    (int)(imagePosX+imageWidth+frameSizeEast),
  560.    (int)(imagePosY+imageHeight+frameSizeNorth));
  561.   printf(h5);
  562.   printf(h6);
  563.   printf(h7);
  564.   printf(h8);
  565.   printf(h9,imageNCols);
  566.   printf(h10,imageNCols);
  567.   printf(h11,imageNCols);
  568.   printf(h12,imageNCols);
  569.   printf(h13);
  570.   printf(gs);
  571.   printf(tl,imagePosX,imagePosY);
  572.   printf(sc,(float)imageWidth,(float)imageHeight);
  573.   printf("%d %d %d\n",imageNCols,imageNRows,imageDepth);
  574.  
  575.   scan=1;
  576.   while (scan)
  577.     {
  578.     c=getchar(); 
  579.     putchar(c);
  580.     if(c==suchGrestore[0]) {
  581.       c=getchar(); 
  582.       putchar(c);
  583.       if(c==suchGrestore[1]) {
  584.         c=getchar(); 
  585.         putchar(c);
  586.         if(c==suchGrestore[2]) {
  587.           c=getchar(); 
  588.           putchar(c);
  589.           if(c==suchGrestore[3]) {
  590.             c=getchar(); 
  591.             putchar(c);
  592.             if(c==suchGrestore[4]) {
  593.               scan=0;
  594.               }
  595.             }
  596.           }
  597.         }
  598.       }
  599.     }      
  600.   drawFrame(imagePosX,imagePosY,imageWidth,imageHeight,1);
  601.   if (strcmp(labelSouth,""))
  602.     {
  603.     drawSouthScale(imagePosX,imagePosY,imageWidth,
  604.       xStartValue,xEndValue,xValueFormat);
  605.     if (strcmp(labelSouth,"noLabel"))
  606.       {
  607.       printLabel(imagePosX+imageWidth/2,imagePosY-35,
  608.         0,labelSouth,12);
  609.       }
  610.     }
  611.   if (strcmp(labelNorth,""))
  612.     {
  613.     drawNorthScale(imagePosX,imagePosY+imageHeight,imageWidth,
  614.       xStartValue,xEndValue,xValueFormat);
  615.     if (strcmp(labelNorth,"noLabel"))
  616.       {
  617.       printLabel(imagePosX+imageWidth/2,imagePosY+imageHeight+25,
  618.         0,labelNorth,12);
  619.       }
  620.     }
  621.   if (strcmp(labelWest,""))
  622.     {
  623.     drawWestScale(imagePosX,imagePosY,imageHeight,
  624.       yStartValue,yEndValue,yValueFormat);
  625.     if (strcmp(labelWest,"noLabel"))
  626.       {
  627.       printLabel(imagePosX-40,imagePosY+imageHeight/2,
  628.         90,labelWest,12);
  629.       }
  630.      }
  631.   if (strcmp(labelEast,""))
  632.     {
  633.     drawEastScale(imagePosX+imageWidth,imagePosY,imageHeight,
  634.       yStartValue,yEndValue,yValueFormat);
  635.     if (strcmp(labelEast,"noLabel"))
  636.       {
  637.       printLabel(imagePosX+imageWidth+47,imagePosY+imageHeight/2,
  638.         90,labelEast,12);
  639.       }
  640.     }
  641.   if (strcmp(labelLegend,""))
  642.     {
  643.     drawLegendScale(imagePosX+imageWidth,imagePosY,imageHeight,
  644.       imageNRows,yStartValue,yEndValue,yValueFormat);
  645.     printLabel(imagePosX+imageWidth+45,imagePosY+imageHeight/2,
  646.       90,labelLegend,12);
  647.      }
  648.   if (strcmp(labelTitle,""))
  649.     {
  650.     printLabel(imagePosX+imageWidth/2,imagePosY+imageHeight+40,
  651.       0,labelTitle,16);
  652.     }
  653.   }
  654.