home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 3 / BBS in a box - Trilogy III.iso / Files / Prog / D-G / GemsII / RealPixels / color.h < prev    next >
Encoding:
C/C++ Source or Header  |  1992-06-16  |  3.0 KB  |  98 lines  |  [TEXT/MPS ]

  1. /* Copyright (c) 1986 Regents of the University of California */
  2.  
  3. /* SCCSid "@(#)color.h 1.12 7/17/91 LBL" */
  4.  
  5. /*
  6.  *  color.h - header for routines using pixel color values.
  7.  *
  8.  *     12/31/85
  9.  *
  10.  *  Two color representations are used, one for calculation and
  11.  *  another for storage.  Calculation is done with three floats
  12.  *  for speed.  Stored color values use 4 bytes which contain
  13.  *  three single byte mantissas and a common exponent.
  14.  */
  15.  
  16. #define  RED        0
  17. #define  GRN        1
  18. #define  BLU        2
  19. #define  EXP        3
  20. #define  COLXS        128    /* excess used for exponent */
  21.  
  22. typedef unsigned char  BYTE;    /* 8-bit unsigned integer */
  23.  
  24. typedef BYTE  COLR[4];        /* red, green, blue, exponent */
  25.  
  26. #define  copycolr(c1,c2)    (c1[0]=c2[0],c1[1]=c2[1], \
  27.                 c1[2]=c2[2],c1[3]=c2[3])
  28.  
  29. typedef float  COLOR[3];    /* red, green, blue */
  30.  
  31. #define  colval(col,pri)    ((col)[pri])
  32.  
  33. #define  setcolor(col,r,g,b)    ((col)[RED]=(r),(col)[GRN]=(g),(col)[BLU]=(b))
  34.  
  35. #define  copycolor(c1,c2)    ((c1)[0]=(c2)[0],(c1)[1]=(c2)[1],(c1)[2]=(c2)[2])
  36.  
  37. #define  scalecolor(col,sf)    ((col)[0]*=(sf),(col)[1]*=(sf),(col)[2]*=(sf))
  38.  
  39. #define  addcolor(c1,c2)    ((c1)[0]+=(c2)[0],(c1)[1]+=(c2)[1],(c1)[2]+=(c2)[2])
  40.  
  41. #define  multcolor(c1,c2)    ((c1)[0]*=(c2)[0],(c1)[1]*=(c2)[1],(c1)[2]*=(c2)[2])
  42.  
  43. #ifdef  NTSC
  44. #define  bright(col)        (.295*(col)[RED]+.636*(col)[GRN]+.070*(col)[BLU])
  45. #define  normbright(c)        (int)((74L*(c)[RED]+164L*(c)[GRN]+18L*(c)[BLU])/256)
  46. #else
  47. #define  bright(col)        (.263*(col)[RED]+.655*(col)[GRN]+.082*(col)[BLU])
  48. #define  normbright(c)        (int)((67L*(c)[RED]+168L*(c)[GRN]+21L*(c)[BLU])/256)
  49. #endif
  50.  
  51. #define  luminance(col)        (470. * bright(col))
  52.  
  53. #define  intens(col)        ( (col)[0] > (col)[1] \
  54.                 ? (col)[0] > (col)[2] ? (col)[0] : (col)[2] \
  55.                 : (col)[1] > (col)[2] ? (col)[1] : (col)[2] )
  56.  
  57. #define  colrval(c,p)        ( (c)[EXP] ? \
  58.                 ldexp((c)[p]+.5,(int)(c)[EXP]-(COLXS+8)) : \
  59.                 0. )
  60.  
  61. #define  WHTCOLOR        {1.0,1.0,1.0}
  62. #define  BLKCOLOR        {0.0,0.0,0.0}
  63. #define  WHTCOLR        {128,128,128,COLXS+1}
  64. #define  BLKCOLR        {0,0,0,0}
  65.  
  66.                 /* definitions for resolution header */
  67. #define  XDECR            1
  68. #define  YDECR            2
  69. #define  YMAJOR            4
  70.  
  71.                 /* picture format identifier */
  72. #define  COLRFMT        "32-bit_rle_rgbe"
  73.  
  74.                 /* macros for exposures */
  75. #define  EXPOSSTR        "EXPOSURE="
  76. #define  LEXPOSSTR        9
  77. #define  isexpos(hl)        (!strncmp(hl,EXPOSSTR,LEXPOSSTR))
  78. #define  exposval(hl)        atof((hl)+LEXPOSSTR)
  79. #define  fputexpos(ex,fp)    fprintf(fp,"%s%e\n",EXPOSSTR,ex)
  80.  
  81.                 /* macros for pixel aspect ratios */
  82. #define  ASPECTSTR        "PIXASPECT="
  83. #define  LASPECTSTR        10
  84. #define  isaspect(hl)        (!strncmp(hl,ASPECTSTR,LASPECTSTR))
  85. #define  aspectval(hl)        atof((hl)+LASPECTSTR)
  86. #define  fputaspect(pa,fp)    fprintf(fp,"%s%f\n",ASPECTSTR,pa)
  87.  
  88.                 /* macros for color correction */
  89. #define  COLCORSTR        "COLORCORR="
  90. #define  LCOLCORSTR        10
  91. #define  iscolcor(hl)        (!strncmp(hl,COLCORSTR,LCOLCORSTR))
  92. #define  colcorval(cc,hl)    sscanf(hl+LCOLCORSTR,"%f %f %f", \
  93.                     &(cc)[RED],&(cc)[GRN],&(cc)[BLU])
  94. #define  fputcolcor(cc,fp)    fprintf(fp,"%s %f %f %f\n",COLCORSTR, \
  95.                     (cc)[RED],(cc)[GRN],(cc)[BLU])
  96.  
  97. extern double  ldexp(), atof();
  98.