add divide_sub_image()

This commit is contained in:
David Rose 2014-11-27 02:10:53 +00:00
parent 4c10c9ec1f
commit 06a4daf9f2
2 changed files with 84 additions and 0 deletions

View File

@ -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

View File

@ -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);