summaryrefslogtreecommitdiff
path: root/src/Fl_Image.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/Fl_Image.cxx')
-rw-r--r--src/Fl_Image.cxx35
1 files changed, 18 insertions, 17 deletions
diff --git a/src/Fl_Image.cxx b/src/Fl_Image.cxx
index c048d57c3..2fc389c86 100644
--- a/src/Fl_Image.cxx
+++ b/src/Fl_Image.cxx
@@ -63,7 +63,6 @@ void Fl_Image::draw(int XP, int YP, int, int, int, int) {
draw_empty(XP, YP);
}
-
/**
The protected method draw_empty() draws a box with
an X in it. It can be used to draw any image that lacks image
@@ -324,31 +323,33 @@ Fl_Image *Fl_RGB_Image::copy(int W, int H) {
}
if (W <= 0 || H <= 0) return 0;
- // OK, need to resize the image data; allocate memory and
+ // OK, need to resize the image data; allocate memory and create new image
uchar *new_ptr; // Pointer into new array
const uchar *old_ptr; // Pointer into old array
- int c, // Channel number
- sy, // Source coordinate
- dx, dy, // Destination coordinates
- xerr, yerr, // X & Y errors
- xmod, ymod, // X & Y moduli
- xstep, ystep, // X & Y step increments
- line_d; // stride from line to line
-
-
- // Figure out Bresenheim step/modulus values...
- xmod = w() % W;
- xstep = (w() / W) * d();
- ymod = h() % H;
- ystep = h() / H;
- line_d = ld() ? ld() : w() * d();
+ int dx, dy, // Destination coordinates
+ line_d; // stride from line to line
// Allocate memory for the new image...
new_array = new uchar [W * H * d()];
new_image = new Fl_RGB_Image(new_array, W, H, d());
new_image->alloc_array = 1;
+ line_d = ld() ? ld() : w() * d();
+
if (Fl_Image::RGB_scaling() == FL_RGB_SCALING_NEAREST) {
+
+ int c, // Channel number
+ sy, // Source coordinate
+ xerr, yerr, // X & Y errors
+ xmod, ymod, // X & Y moduli
+ xstep, ystep; // X & Y step increments
+
+ // Figure out Bresenham step/modulus values...
+ xmod = w() % W;
+ xstep = (w() / W) * d();
+ ymod = h() % H;
+ ystep = h() / H;
+
// Scale the image using a nearest-neighbor algorithm...
for (dy = H, sy = 0, yerr = H, new_ptr = new_array; dy > 0; dy --) {
for (dx = W, xerr = W, old_ptr = array + sy * line_d; dx > 0; dx --) {