home *** CD-ROM | disk | FTP | other *** search
/ Big Green CD 8 / BGCD_8_Dev.iso / NEXTSTEP / UNIX / Web / Utilities / wwwcount-2.3 / combine / frameim.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-05-02  |  5.7 KB  |  223 lines

  1. /*
  2.  *  FrameImage - wraps image with an ornamental frame
  3.  *
  4.  *  RCS:
  5.  *      $Revision: 2.3 $
  6.  *      $Date: 1996/05/03 02:21:34 $
  7.  *
  8.  *  Security:
  9.  *      Unclassified
  10.  *
  11.  *  Description:
  12.  *      From ImageMagick 3.6.5
  13.  *
  14.  *  Input Parameters:
  15.  *      type    identifier  description
  16.  *
  17.  *      text
  18.  *
  19.  *  Output Parameters:
  20.  *      type    identifier  description
  21.  *
  22.  *      text
  23.  *
  24.  *  Return Values:
  25.  *      value   description
  26.  *
  27.  *  Side Effects:
  28.  *      text
  29.  *
  30.  *  Limitations and Comments:
  31.  *      text
  32.  *
  33.  *  Development History:
  34.  *      who                 when        why
  35.  *      muquit@semcor.com   18-Aug-95   first cut
  36.  */
  37.  
  38. #include "combine.h"
  39. #include "defines.h"
  40.  
  41. Image *FrameImage (mimage, frame_info)
  42. Image
  43.     *mimage;
  44. FrameInfo
  45.     *frame_info;
  46. {
  47.     Image
  48.         *framed_image;
  49.  
  50.     int
  51.         height,
  52.         width;
  53.  
  54.     register int
  55.         x,
  56.         y;
  57.  
  58.     register Runlength
  59.         *p,
  60.         *q;
  61.  
  62.     Runlength
  63.         highlight,
  64.         matte,
  65.         shadow;
  66.  
  67.     unsigned int
  68.         bevel_width;
  69.  
  70.     if ((frame_info->outer_bevel < 0) || (frame_info->inner_bevel < 0))
  71.     {
  72.         (void) fprintf (stderr,"Unable to Frame image!\n");
  73.         return ((Image *) NULL);
  74.     }
  75.     
  76.     bevel_width=frame_info->outer_bevel+frame_info->inner_bevel;
  77.     width=(int) frame_info->width-frame_info->x-bevel_width;
  78.     height=(int) frame_info->height-frame_info->y-bevel_width;
  79.  
  80.     if ((width < mimage->columns) || (height < mimage->rows))
  81.     {
  82.         (void) fprintf (stderr,"Unable to Frame image!\n");
  83.         return ((Image *) NULL);
  84.     }
  85.     
  86.     framed_image=DuplicateImage(mimage,frame_info->width,frame_info->height,
  87.         False);
  88.     if (framed_image == (Image *) NULL)
  89.     {
  90.         (void) fprintf (stderr,"Unable to Frame image!\n");
  91.         return ((Image *) NULL);
  92.     }
  93.  
  94.     mimage->class=DirectClass;
  95.  
  96.     matte.red=frame_info->matte_color.red;
  97.     matte.green=frame_info->matte_color.green;
  98.     matte.blue=frame_info->matte_color.blue;
  99.     matte.index=MaxRGB;
  100.     matte.length=0;
  101.  
  102.     highlight.red=frame_info->highlight_color.red;
  103.     highlight.green=frame_info->highlight_color.green;
  104.     highlight.blue=frame_info->highlight_color.blue;
  105.     highlight.index=MaxRGB;
  106.     highlight.length=0;
  107.  
  108.     shadow.red=frame_info->shadow_color.red;
  109.     shadow.green=frame_info->shadow_color.green;
  110.     shadow.blue=frame_info->shadow_color.blue;
  111.     shadow.index=MaxRGB;
  112.     shadow.length=0;
  113.  
  114.     q=framed_image->pixels;
  115.     for (y=0; y < frame_info->outer_bevel; y++)
  116.     {
  117.         for (x=0; x < (framed_image->columns-y); x++)
  118.         {
  119.             *q++=highlight;
  120.         }
  121.         for ( ; x < framed_image->columns; x++)
  122.             *q++=shadow;
  123.     }
  124.  
  125.     for (y=0; y < (frame_info->y-bevel_width); y++)
  126.     {
  127.         for (x=0; x < frame_info->outer_bevel; x++)
  128.             *q++=highlight;
  129.         for (x=0; x < (framed_image->columns-
  130.             (frame_info->outer_bevel << 1)); x++)
  131.             *q++=matte;
  132.         for (x=0; x < frame_info->outer_bevel; x++)
  133.             *q++=shadow;
  134.     }
  135.  
  136.     for (y=0; y < frame_info->inner_bevel; y++)
  137.     {
  138.         for (x=0; x < frame_info->outer_bevel; x++)
  139.             *q++=highlight;
  140.         for (x=0; x < (frame_info->x-bevel_width); x++)
  141.             *q++=matte;
  142.         for (x=0; x < (mimage->columns+(frame_info->inner_bevel << 1)-y); x++)
  143.             *q++=shadow;
  144.         for ( ; x < (mimage->columns+(frame_info->inner_bevel << 1)); x++)
  145.             *q++=highlight;
  146.         width=frame_info->width-frame_info->x-mimage->columns-bevel_width;
  147.         for (x=0; x < width; x++)
  148.             *q++=matte;
  149.         for (x=0; x < frame_info->outer_bevel; x++)
  150.             *q++=shadow;
  151.     }
  152.     p=mimage->pixels;
  153.     mimage->runlength=p->length+1;
  154.     for (y=0; y < mimage->rows; y++)
  155.     {
  156.         for (x=0; x < frame_info->outer_bevel; x++)
  157.             *q++=highlight;
  158.         for (x=0; x < (frame_info->x-bevel_width); x++)
  159.             *q++=matte;
  160.         for (x=0; x < frame_info->inner_bevel; x++)
  161.             *q++=shadow;
  162.  
  163.         /*
  164.         ** Transfer scanline
  165.         */
  166.         for (x=0; x < mimage->columns; x++)
  167.         {
  168.             if (mimage->runlength != 0)
  169.                 mimage->runlength--;
  170.             else
  171.             {
  172.                 p++;
  173.                 mimage->runlength=p->length;
  174.             }
  175.             *q=(*p);
  176.             q->length=0;
  177.             q++;
  178.         }
  179.         for (x=0; x < frame_info->inner_bevel; x++)
  180.             *q++=highlight;
  181.         width=frame_info->width-frame_info->x-mimage->columns-bevel_width;
  182.         for (x=0; x < width; x++)
  183.             *q++=matte;
  184.         for (x=0; x < frame_info->outer_bevel; x++)
  185.             *q++=shadow;
  186.     }
  187.     for (y=frame_info->inner_bevel-1; y >= 0; y--)
  188.     {
  189.         for (x=0; x < frame_info->outer_bevel; x++)
  190.             *q++=highlight;
  191.         for (x=0; x < (frame_info->x-bevel_width); x++)
  192.             *q++=matte;
  193.         for (x=0; x < y; x++)
  194.             *q++=shadow;
  195.         for ( ; x < (mimage->columns+(frame_info->inner_bevel << 1)); x++)
  196.             *q++=highlight;
  197.         width=frame_info->width-frame_info->x-mimage->columns-bevel_width;
  198.         for (x=0; x < width; x++)
  199.             *q++=matte;
  200.         for (x=0; x < frame_info->outer_bevel; x++)
  201.             *q++=shadow;
  202.     }
  203.     height=frame_info->height-frame_info->y-mimage->rows-bevel_width;
  204.     for (y=0; y < height; y++)
  205.     {
  206.         for (x=0; x < frame_info->outer_bevel; x++)
  207.             *q++=highlight;
  208.         for (x=0; x < (framed_image->columns-
  209.             (frame_info->outer_bevel << 1)); x++)
  210.             *q++=matte;
  211.         for (x=0; x < frame_info->outer_bevel; x++)
  212.             *q++=shadow;
  213.     }
  214.     for (y=frame_info->outer_bevel-1; y >= 0; y--)
  215.     {
  216.         for (x=0; x < y; x++)
  217.             *q++=highlight;
  218.         for ( ; x < framed_image->columns; x++)
  219.             *q++=shadow;
  220.     }
  221. return (framed_image);
  222. }
  223.