From 76f2f2b0bacb3406d02fc9296871499af3b9e91b Mon Sep 17 00:00:00 2001 From: rdb Date: Sun, 16 May 2010 09:46:19 +0000 Subject: [PATCH] Add unary complement operator to PNMImage (ability to do ~image) --- panda/src/pnmimage/pnmImage.cxx | 32 ++++++++++++++++++++++++++++++++ panda/src/pnmimage/pnmImage.h | 2 ++ 2 files changed, 34 insertions(+) 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;