diff options
| -rw-r--r-- | CHANGES | 1 | ||||
| -rw-r--r-- | src/Fl_Image.cxx | 16 |
2 files changed, 14 insertions, 3 deletions
@@ -1,5 +1,6 @@ CHANGES IN FLTK 1.1.8 + - Fixed image copy code (STR #1412) - Fixed latin-to-roman text conversion (STR #1411) - Fixed Cygwin timeout for "select" calls (STR #1151) - Improved Mac OS X subwindow handling (STR #1402) diff --git a/src/Fl_Image.cxx b/src/Fl_Image.cxx index cd992e9fc..0b844255c 100644 --- a/src/Fl_Image.cxx +++ b/src/Fl_Image.cxx @@ -156,9 +156,19 @@ Fl_Image *Fl_RGB_Image::copy(int W, int H) { if (array) { // Make a copy of the image data and return a new Fl_RGB_Image... new_array = new uchar[w() * h() * d()]; - memcpy(new_array, array, w() * h() * d()); - - new_image = new Fl_RGB_Image(new_array, w(), h(), d(), ld()); + if (ld()) { + const uchar *src = array; + uchar *dst = new_array; + int dy, dh = h(), wd = w()*d(), wdld = wd+ld(); + for (dy=0; dy<dh; dy++) { + memcpy(dst, src, wd); + src += wdld; + dst += wd; + } + } else { + memcpy(new_array, array, w() * h() * d()); + } + new_image = new Fl_RGB_Image(new_array, w(), h(), d()); new_image->alloc_array = 1; return new_image; |
