## NAME

         glr_compress - Performs grey level runlength coding

## SYNOPSIS

          #include "CVIPtoolkit.h"
          #include "CVIPconvert.h"
          #include "CVIPdef.h"
          #include "grey_RLC.h"
          #include <sys/types.h>
          #include <sys/stat.h>

         int glr_compress(Image *inputImage, char *filename, int win)
          <inputImage> - a pointer to an Image structure
          <filename> - pointer to char string containing filename
          <win> - size of window (1-128)

         Image *glr_decompress(char filename)

          <filename> - name of the compressed file

## PATH

         $CVIPHOME/COMPRESSION/grey_RLC.c

## DESCRIPTION

         glr_compress takes three parameters,   the  pointer  to  the
         input  image  array of type byte, the file name to which the
         compressed image is to be stored, and the window length. The
         valid window length is (1-128). The user is suggested to use
         window length from 1-75 as this range gives better  results.
         The higher the window range the higher the compression ratio
         and vice versa. At the end of the compression, this  routine
         automatically  writes  to  the  working window the following
         data: the size of the original image, size of the compressed
         file, compression ratio.

         Algorithmic details can be found in "A Dynamic  Window-Based
         Runlength Coding Algorithm Applied to Gray-Level Images", M.
         Kumaran, S.E Umbaugh, GRAPHICAL MODELS AND IMAGE PROCESSING,
         Vol. 57, No. 4, July 1995, pp. 267-282.

         glr_decompress takes pointer  to  the  character  array  and
         returns pointer to the image. The character array represents
         the filename to be decoded. It  returns  a  pointer  to  the
         decoded image structure.

## TYPES AND CONSTANTS

         None

## RETURN VALUES

         glr_compress: 0 on success, -1 on failure

         glr_decompress: an uncompressed image pointer on success,  a
         NULL pointer on failure

## HISTORY

         History information recorded: None

## EXAMPLE

          #include <CVIPtoolkit.h>
          #include <CVIPimage.h>
          #include <CVIPdef.h>
          #include <CVIPconvert.h>
          #include <CVIPview.h>
          #include <sys/types.h>
          #include <sys/stat.h>
          #define VIEWER "picture"
          #define VIDEO_APP "SunVideo &"

          void main()
          {
          Image *cvipImage;
          IMAGE_FORMAT format;
          char *inputfile,*outputfile;

          setDisplay_Image(VIEWER, "Default");
          print_CVIP("\n\t\tEnter the  Input File Name:  ");
          inputfile =(char *) getString_CVIP();
          format = getFormat_CVIP(inputfile);
          cvipImage = read_Image(inputfile,1);
          view_Image(cvipImage, inputfile);
          free(inputfile);
          /* the following call performs the gray level run length
          coding with the window size equal to 32 */
          glr_compress(cvipImage,"file1",32);
          /* the following call performs the gray level run length
          decoding of the "file1" */
          cvipImage=glr_decompress("file1");
          print_CVIP("\n\t\tEnter the Output File Name:  ");
          outputfile = getString_CVIP();
          view_Image(cvipImage,outputfile);
          write_Image(cvipImage,outputfile,CVIP_NO,CVIP_NO,format,1);
          free(outputfile);
          }

## SEE ALSO

         libcompress

## DIAGNOSTICS

         The Grey level Runlength coding and decoding  algorithm  was
         designed to work only on monochrome images.

## AUTHOR

         Muthu Kumar, SIUE

         Copyright (C) 1995 SIUE - by Scott Umbaugh and Muthu Kumar.