From 44bf0582cfb605dd6e2a7b90f89f0853be371166 Mon Sep 17 00:00:00 2001 From: rdb Date: Sun, 31 Oct 2010 13:23:00 +0000 Subject: [PATCH] fix image -= colour --- panda/src/pnmimage/pnmImage.cxx | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/panda/src/pnmimage/pnmImage.cxx b/panda/src/pnmimage/pnmImage.cxx index d90e03f4d7..66df0aca2b 100644 --- a/panda/src/pnmimage/pnmImage.cxx +++ b/panda/src/pnmimage/pnmImage.cxx @@ -1529,7 +1529,28 @@ operator -= (const PNMImage &other) { //////////////////////////////////////////////////////////////////// void PNMImage:: operator -= (const Colord &other) { - (*this) += (-other); + size_t array_size = _x_size * _y_size; + xel subxel (to_val(other.get_x()), to_val(other.get_y()), to_val(other.get_z())); + xelval subalpha = to_val(other.get_w()); + + if (_array != NULL && _alpha != NULL) { + for (size_t i = 0; i < array_size; ++i) { + _array[i].r = clamp_val(_array[i].r - subxel.r); + _array[i].g = clamp_val(_array[i].g - subxel.g); + _array[i].b = clamp_val(_array[i].b - subxel.b); + _alpha[i] = clamp_val(_alpha[i] + subalpha); + } + } else if (_array != NULL) { + for (size_t i = 0; i < array_size; ++i) { + _array[i].r = clamp_val(_array[i].r - subxel.r); + _array[i].g = clamp_val(_array[i].g - subxel.g); + _array[i].b = clamp_val(_array[i].b - subxel.b); + } + } else if (_alpha != NULL) { + for (size_t i = 0; i < array_size; ++i) { + _alpha[i] = clamp_val(_alpha[i] - subalpha); + } + } } ////////////////////////////////////////////////////////////////////