Browse Source

add divide_sub_image()

David Rose 11 years ago
parent
commit
06a4daf9f2
2 changed files with 84 additions and 0 deletions
  1. 80 0
      panda/src/pnmimage/pfmFile.cxx
  2. 4 0
      panda/src/pnmimage/pfmFile.h

+ 80 - 0
panda/src/pnmimage/pfmFile.cxx

@@ -2079,6 +2079,86 @@ mult_sub_image(const PfmFile &copy, int xto, int yto,
   } 
 }
 
+////////////////////////////////////////////////////////////////////
+//     Function: PfmFile::divide_sub_image
+//       Access: Published
+//  Description: Behaves like copy_sub_image(), except the copy pixels
+//               are divided into the pixels of the destination, after
+//               scaling by the specified pixel_scale. 
+//               dest(x, y) = dest(x, y) / (copy(x, y) * pixel_scale).
+////////////////////////////////////////////////////////////////////
+void PfmFile::
+divide_sub_image(const PfmFile &copy, int xto, int yto,
+                 int xfrom, int yfrom, int x_size, int y_size,
+                 double pixel_scale) {
+  int xmin, ymin, xmax, ymax;
+  setup_sub_image(copy, xto, yto, xfrom, yfrom, x_size, y_size,
+                  xmin, ymin, xmax, ymax);
+
+  int x, y;
+  switch (_num_channels) {
+  case 1:
+    {
+      for (y = ymin; y < ymax; y++) {
+        for (x = xmin; x < xmax; x++) {
+          if (has_point(x, y) && copy.has_point(x - xmin + xfrom, y - ymin + yfrom)) {
+            set_point1(x, y, get_point1(x, y) / copy.get_point1(x - xmin + xfrom, y - ymin + yfrom) * pixel_scale);
+          }
+        }
+      }
+    }
+    break;
+
+  case 2:
+    {
+      for (y = ymin; y < ymax; y++) {
+        for (x = xmin; x < xmax; x++) {
+          if (has_point(x, y) && copy.has_point(x - xmin + xfrom, y - ymin + yfrom)) {
+            LPoint2f p = copy.get_point2(x - xmin + xfrom, y - ymin + yfrom) * pixel_scale;
+            LPoint2f &t = modify_point2(x, y);
+            t[0] /= p[0];
+            t[1] /= p[1];
+          }
+        }
+      }
+    }
+    break;
+
+  case 3:
+    {
+      for (y = ymin; y < ymax; y++) {
+        for (x = xmin; x < xmax; x++) {
+          if (has_point(x, y) && copy.has_point(x - xmin + xfrom, y - ymin + yfrom)) {
+            LPoint3f p = copy.get_point3(x - xmin + xfrom, y - ymin + yfrom) * pixel_scale;
+            LPoint3f &t = modify_point3(x, y);
+            t[0] /= p[0];
+            t[1] /= p[1];
+            t[2] /= p[2];
+          }
+        }
+      }
+    }
+    break;
+
+  case 4:
+    {
+      for (y = ymin; y < ymax; y++) {
+        for (x = xmin; x < xmax; x++) {
+          if (has_point(x, y) && copy.has_point(x - xmin + xfrom, y - ymin + yfrom)) {
+            LPoint4f p = copy.get_point4(x - xmin + xfrom, y - ymin + yfrom) * pixel_scale;
+            LPoint4f &t = modify_point4(x, y);
+            t[0] /= p[0];
+            t[1] /= p[1];
+            t[2] /= p[2];
+            t[3] /= p[3];
+          }
+        }
+      }
+    }
+    break;
+  } 
+}
+
 ////////////////////////////////////////////////////////////////////
 //     Function: PfmFile::operator *=
 //       Access: Published

+ 4 - 0
panda/src/pnmimage/pfmFile.h

@@ -148,6 +148,10 @@ PUBLISHED:
                       int xfrom = 0, int yfrom = 0,
                       int x_size = -1, int y_size = -1,
                       double pixel_scale = 1.0);
+  void divide_sub_image(const PfmFile &copy, int xto, int yto,
+                        int xfrom = 0, int yfrom = 0,
+                        int x_size = -1, int y_size = -1,
+                        double pixel_scale = 1.0);
 
   void operator *= (double multiplier);