Browse Source

add -cscale

David Rose 20 years ago
parent
commit
0f01f99d2a
2 changed files with 32 additions and 0 deletions
  1. 30 0
      pandatool/src/imageprogs/imageTrans.cxx
  2. 2 0
      pandatool/src/imageprogs/imageTrans.h

+ 30 - 0
pandatool/src/imageprogs/imageTrans.cxx

@@ -41,7 +41,13 @@ ImageTrans() : ImageFilter(true) {
      "image.",
      &ImageTrans::dispatch_channels, NULL, &_channels);
 
+  add_option
+    ("cscale", "r,g,b[,a]", 50,
+     "Apply the indicated color scale to each pixel of the image.",
+     &ImageTrans::dispatch_color, &_has_color_scale, &_color_scale);
+
   _channels = C_default;
+  _color_scale.set(1.0f, 1.0f, 1.0f, 1.0f);
 }
 
 ////////////////////////////////////////////////////////////////////
@@ -82,6 +88,30 @@ run() {
     break;
   }
 
+  if (_has_color_scale) {
+    if (_color_scale[0] != 1.0f ||
+	_color_scale[1] != 1.0f ||
+	_color_scale[2] != 1.0f) {
+      for (int yi = 0; yi < _image.get_y_size(); ++yi) {
+	for (int xi = 0; xi < _image.get_x_size(); ++xi) {
+	  RGBColord rgb = _image.get_xel(xi, yi);
+	  _image.set_xel(xi, yi, 
+			 rgb[0] * _color_scale[0],
+			 rgb[1] * _color_scale[1],
+			 rgb[2] * _color_scale[2]);
+	}
+      }
+    }
+    if (_image.has_alpha() && _color_scale[3] != 1.0f) {
+      for (int yi = 0; yi < _image.get_y_size(); ++yi) {
+	for (int xi = 0; xi < _image.get_x_size(); ++xi) {
+	  float a = _image.get_alpha(xi, yi);
+	  _image.set_alpha(xi, yi, a * _color_scale[3]);
+	}
+      }
+    }
+  }
+
   write_image();
 }
 

+ 2 - 0
pandatool/src/imageprogs/imageTrans.h

@@ -52,6 +52,8 @@ private:
   };
     
   Channels _channels;
+  Colorf _color_scale;
+  bool _has_color_scale;
 };
 
 #endif