diff --git a/panda/src/pnmimage/pnmImage.cxx b/panda/src/pnmimage/pnmImage.cxx index a606fad944..ec329d790f 100644 --- a/panda/src/pnmimage/pnmImage.cxx +++ b/panda/src/pnmimage/pnmImage.cxx @@ -1317,6 +1317,38 @@ setup_rc() { } } +//////////////////////////////////////////////////////////////////// +// Function: PNMImage::operator ~ +// Access: Published +// Description: Returns a new PNMImage that is the +// complement of the current PNMImage. +//////////////////////////////////////////////////////////////////// +PNMImage PNMImage:: +operator ~ () const { + PNMImage target (*this); + size_t array_size = _x_size * _y_size; + + if (_array != NULL && _alpha != NULL) { + for (size_t i = 0; i < array_size; ++i) { + target._array[i].r = _maxval - _array[i].r; + target._array[i].g = _maxval - _array[i].g; + target._array[i].b = _maxval - _array[i].b; + target._alpha[i] = _maxval - _alpha[i]; + } + } else if (_array != NULL) { + for (size_t i = 0; i < array_size; ++i) { + target._array[i].r = _maxval - _array[i].r; + target._array[i].g = _maxval - _array[i].g; + target._array[i].b = _maxval - _array[i].b; + } + } else if (_alpha != NULL) { + for (size_t i = 0; i < array_size; ++i) { + target._alpha[i] = _maxval - _alpha[i]; + } + } + return target; +} + //////////////////////////////////////////////////////////////////// // Function: PNMImage::operator += // Access: Published diff --git a/panda/src/pnmimage/pnmImage.h b/panda/src/pnmimage/pnmImage.h index 09b3b76b52..1b7265d23b 100644 --- a/panda/src/pnmimage/pnmImage.h +++ b/panda/src/pnmimage/pnmImage.h @@ -254,6 +254,8 @@ private: void setup_rc(); PUBLISHED: + PNMImage operator ~() const; + INLINE PNMImage operator + (const PNMImage &other) const; INLINE PNMImage operator + (const Colord &other) const; INLINE PNMImage operator - (const PNMImage &other) const;