home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 309.lha / PBM_PLUS / ppm / ppm.h < prev    next >
C/C++ Source or Header  |  1980-12-04  |  2KB  |  71 lines

  1. /* ppm.h - header file for libppm portable pixelmap library
  2. */
  3.  
  4. #ifndef _PPM_H_
  5. #define _PPM_H_
  6.  
  7. #include "pgm.h"
  8.  
  9. typedef gray pixval;
  10.  
  11. #ifdef PPM_PACKCOLORS
  12.  
  13. #define PPM_MAXMAXVAL 1023
  14. typedef unsigned long pixel;
  15. #define PPM_GETR(p) (((p) & 0x3ff00000) >> 20)
  16. #define PPM_GETG(p) (((p) & 0xffc00) >> 10)
  17. #define PPM_GETB(p) ((p) & 0x3ff)
  18. #define PPM_ASSIGN(p,red,grn,blu) (p) = ((pixel) (red) << 20) | ((pixel) (grn) << 10) | (pixel) (blu)
  19. #define PPM_EQUAL(p,q) ((p) == (q))
  20.  
  21. #else PPM_PACKCOLORS
  22.  
  23. #define PPM_MAXMAXVAL PGM_MAXMAXVAL
  24. typedef struct
  25.     {
  26.     pixval r, g, b;
  27.     } pixel;
  28. #define PPM_GETR(p) ((p).r)
  29. #define PPM_GETG(p) ((p).g)
  30. #define PPM_GETB(p) ((p).b)
  31. #define PPM_ASSIGN(p,red,grn,blu) do { (p).r = (red); (p).g = (grn); (p).b = (blu); } while ( 0 )
  32. #define PPM_EQUAL(p,q) ( (p).r == (q).r && (p).g == (q).g && (p).b == (q).b )
  33.  
  34. #endif PPM_PACKCOLORS
  35.  
  36. /* Declarations of routines. */
  37.  
  38. #define ppm_allocarray( cols, rows ) ((pixel **) pm_allocarray( cols, rows, sizeof(pixel) ))
  39. #define ppm_allocrow( cols ) ((pixel *) pm_allocrow( cols, sizeof(pixel) ))
  40. #define ppm_freearray( pixelrow, rows ) pm_freearray( pixelrow, rows )
  41. #define ppm_freerow( pixelrow ) pm_freerow( pixelrow )
  42.  
  43. pixel **ppm_readppm( /* FILE *file, int *colsP, int *rowsP, pixval *maxvalP */ );
  44. void ppm_readppminit( /* FILE *file, int *colsP, int *rowsP, pixval *maxvalP, int *formatP */ );
  45. void ppm_readppmrow( /* FILE *file, pixel *pixelrow, int cols, pixval maxval, int format */ );
  46.  
  47. void ppm_writeppm( /* FILE *file, pixel **pixels, int cols, int rows, pixval maxval */ );
  48. void ppm_writeppminit( /* FILE *file, int cols, int rows, pixval maxval */ );
  49. void ppm_writeppmrow( /* FILE *file, pixel *pixelrow, int cols, pixval maxval */ );
  50.  
  51. pixel ppm_backgroundpixel( /* pixel **pixels, int cols, int rows */ );
  52.  
  53. extern pixval ppm_pbmmaxval;
  54. /* This is the maxval used when a PPM program reads a PBM file.  Normally
  55. ** it is 1; however, for some programs, a larger value gives better results
  56. */
  57.  
  58. /* Color scaling macro -- to make writing ppmtowhatever easier. */
  59.  
  60. #define PPM_CSCALE(newp,p,oldmaxval,newmaxval) \
  61.     PPM_ASSIGN( (newp), \
  62.             (int) PPM_GETR(p) * (newmaxval) / (oldmaxval), \
  63.             (int) PPM_GETG(p) * (newmaxval) / (oldmaxval), \
  64.             (int) PPM_GETB(p) * (newmaxval) / (oldmaxval) )
  65.  
  66. /* Luminance macro. */
  67.  
  68. #define PPM_LUMIN(p) ( 0.299 * PPM_GETR(p) + 0.587 * PPM_GETG(p) + 0.114 * PPM_GETB(p) )
  69.  
  70. #endif _PPM_H_
  71.