瀏覽代碼

Add unary complement operator to PNMImage (ability to do ~image)

rdb 15 年之前
父節點
當前提交
76f2f2b0ba
共有 2 個文件被更改,包括 34 次插入0 次删除
  1. 32 0
      panda/src/pnmimage/pnmImage.cxx
  2. 2 0
      panda/src/pnmimage/pnmImage.h

+ 32 - 0
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

+ 2 - 0
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;