14 #ifndef PNMIMAGE_BASE_H 15 #define PNMIMAGE_BASE_H 32 typedef unsigned short gray;
33 #define PGM_MAXMAXVAL 65535 35 typedef unsigned char gray;
36 #define PGM_MAXMAXVAL 255 37 #endif // PGM_BIGGRAYS 39 #define PNM_MAXMAXVAL PGM_MAXMAXVAL 44 pixel(gray fill) : r(fill), g(fill), b(fill) { }
45 pixel(gray r, gray g, gray b) : r(r), g(g), b(b) { }
47 gray operator [](
int i)
const { nassertr(i >= 0 && i < 3, 0);
return *(&r + i); }
48 gray &operator [](
int i) { nassertr(i >= 0 && i < 3, r);
return *(&r + i); }
50 {
return pixel(r + other.r, g + other.g, b + other.b); }
52 {
return pixel(r - other.r, g - other.g, b - other.b); }
53 pixel operator * (
const double mult)
const 54 {
return pixel(r * mult, g * mult, b * mult); }
55 void operator += (
const pixel &other)
56 { r += other.r; g += other.g; b += other.b; }
57 void operator -= (
const pixel &other)
58 { r -= other.r; g -= other.g; b -= other.b; }
59 void operator *= (
const double mult)
60 { r *= mult; g *= mult; b *= mult; }
63 static int size() {
return 3; }
64 void output(std::ostream &out) {
65 out <<
"pixel(r=" << r <<
", g=" << g <<
", b=" << b <<
")";
78 #define PPM_GETR(p) ((p).r) 79 #define PPM_GETG(p) ((p).g) 80 #define PPM_GETB(p) ((p).b) 82 #define PPM_PUTR(p,red) ((p).r = (red)) 83 #define PPM_PUTG(p,grn) ((p).g = (grn)) 84 #define PPM_PUTB(p,blu) ((p).b = (blu)) 86 #define PPM_ASSIGN(p,red,grn,blu) { (p).r = (red); (p).g = (grn); (p).b = (blu); } 87 #define PPM_EQUAL(p,q) ( (p).r == (q).r && (p).g == (q).g && (p).b == (q).b ) 88 #define PNM_ASSIGN1(x,v) PPM_ASSIGN(x,0,0,v) 90 #define PPM_DEPTH(newp,p,oldmaxval,newmaxval) \ 92 ( (int) PPM_GETR(p) * (newmaxval) + (oldmaxval) / 2 ) / (oldmaxval), \ 93 ( (int) PPM_GETG(p) * (newmaxval) + (oldmaxval) / 2 ) / (oldmaxval), \ 94 ( (int) PPM_GETB(p) * (newmaxval) + (oldmaxval) / 2 ) / (oldmaxval) ) 99 EXPCL_PANDA_PNMIMAGE
void pm_message(
const char *format, ...);
100 EXPCL_PANDA_PNMIMAGE
void pm_error(
const char *format, ...);
105 EXPCL_PANDA_PNMIMAGE
char *
pm_allocrow(
int cols,
int size);
106 EXPCL_PANDA_PNMIMAGE
void pm_freerow(
char *itrow);
108 EXPCL_PANDA_PNMIMAGE
int pm_readbigshort(std::istream *in,
short *sP);
109 EXPCL_PANDA_PNMIMAGE
int pm_writebigshort(std::ostream *out,
short s);
110 EXPCL_PANDA_PNMIMAGE
int pm_readbiglong(std::istream *in,
long *lP);
111 EXPCL_PANDA_PNMIMAGE
int pm_writebiglong(std::ostream *out,
long l);
112 EXPCL_PANDA_PNMIMAGE
int pm_readlittleshort(std::istream *in,
short *sP);
113 EXPCL_PANDA_PNMIMAGE
int pm_writelittleshort(std::ostream *out,
short s);
114 EXPCL_PANDA_PNMIMAGE
int pm_readlittlelong(std::istream *in,
long *lP);
115 EXPCL_PANDA_PNMIMAGE
int pm_writelittlelong(std::ostream *out,
long l);
120 static const float lumin_red = 0.299f;
121 static const float lumin_grn = 0.587f;
122 static const float lumin_blu = 0.114f;
EXPCL_PANDA_PNMIMAGE int pm_maxvaltobits(int maxval)
Returns the number of bits sufficient to hold the indicated maxval value.
EXPCL_PANDA_PNMIMAGE void pm_message(const char *format,...)
Outputs the given printf-style message to the user and returns.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
EXPCL_PANDA_PNMIMAGE int pm_bitstomaxval(int bits)
Returns the highest maxval that can be represented in the indicated number of bits.
EXPCL_PANDA_PNMIMAGE void pm_freerow(char *itrow)
Frees the row previously allocated withm pm_allocrow().
EXPCL_PANDA_PNMIMAGE char * pm_allocrow(int cols, int size)
Allocates a row of cols * size bytes.
EXPCL_PANDA_PNMIMAGE void pm_error(const char *format,...)
Outputs the given printf-style message to the user and terminates messily.