home *** CD-ROM | disk | FTP | other *** search
/ AMIGA PD 1 / AMIGA-PD-1.iso / Programme_zum_Heft / Anwendungen / Kurztests / PBM / ILBMTOPPM.LHA / src / ppmfloyd.h < prev    next >
C/C++ Source or Header  |  1994-10-25  |  2KB  |  74 lines

  1. /* ppmfloyd.h - header file for libfloyd Floyd-Steinberg routines */
  2.  
  3. #ifndef _PPM_FLOYD_H_
  4. #define _PPM_FLOYD_H_
  5.  
  6. #include "ppm.h"
  7.  
  8.  
  9. /* PRIVATE STRUCTURE - do not access any member of it directly! */
  10. typedef struct {
  11.     long *thisrederr, *thisgreenerr, *thisblueerr;
  12.     long *nextrederr, *nextgreenerr, *nextblueerr;
  13.     int lefttoright;                /* 1 for left-to-right scan, 0 for right-to-left */
  14.     int cols, col_end;
  15.     pixel *pixrow;
  16.     pixval maxval;
  17.     int flags;
  18.     pixval red, green, blue;        /* cache: values of current pixel */
  19. } ppm_fs_info;
  20. #define FS_ALTERNATE    (1<<0)
  21. #define FS_RANDOMINIT   (1<<1)
  22.  
  23.  
  24. /* Declarations of routines. */
  25.  
  26. ppm_fs_info *   ppm_fs_init ARGS((int cols, pixval maxval, int flags));
  27. void            ppm_fs_free ARGS((ppm_fs_info *fi));
  28.  
  29. int             ppm_fs_startrow ARGS((ppm_fs_info *fi, pixel *pixrow));
  30. int             ppm_fs_next     ARGS((ppm_fs_info *fi, int col));
  31. void            ppm_fs_endrow   ARGS((ppm_fs_info *fi));
  32.  
  33. void            ppm_fs_update  ARGS((ppm_fs_info *fi, int col, pixel *pP));
  34. void            ppm_fs_update3 ARGS((ppm_fs_info *fs, int col, pixval r, pixval g, pixval b));
  35.  
  36.  
  37. #if 0       /* EXAMPLE */
  38. void
  39. do_something(pixels, cols, rows, maxval, use_floyd)
  40.     pixel **pixels;
  41.     int cols, rows;
  42.     pixval maxval;
  43.     int use_floyd;
  44. {
  45.     ppm_fs_info *fi;
  46.     int row, col;
  47.  
  48.     if( use_floyd )
  49.         fi = ppm_fs_init(cols, maxval, FS_ALTERNATE);
  50.     else
  51.         fi = NULL;
  52.  
  53.     for( row = 0; row < rows; row++ ) {
  54.         for( col = ppm_fs_startrow(fi, pixels[row]); col < cols; col = ppm_fs_next(fi, col) ) {
  55.             pixel *pP = &pixrow[col];
  56.  
  57.             /* do something with the pixel */
  58.  
  59.             ppm_fs_update(fi, col, pP);
  60.         }
  61.         ppm_fs_endrow(fi);
  62.     }
  63.     ppm_fs_free(fi);
  64. }
  65. #endif /* 0 */
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72. #endif /* _PPM_FLOYD_H_ */
  73.  
  74.