diff --git a/source/paint/graphics.cpp b/source/paint/graphics.cpp index c622aa3f..20048291 100644 --- a/source/paint/graphics.cpp +++ b/source/paint/graphics.cpp @@ -1473,7 +1473,7 @@ namespace paint { if (vertical) { - int x1 = good_rct.x, x2 = good_rct.right(); + int x1 = good_rct.x, x2 = good_rct.right() - 1; auto y = good_rct.y; for (; y < endpos; ++y) { @@ -1489,7 +1489,7 @@ namespace paint } else { - int y1 = good_rct.y, y2 = good_rct.bottom(); + int y1 = good_rct.y, y2 = good_rct.bottom() - 1; auto x = good_rct.x; for (; x < endpos; ++x) { diff --git a/source/paint/pixel_buffer.cpp b/source/paint/pixel_buffer.cpp index 81316842..304bbc33 100644 --- a/source/paint/pixel_buffer.cpp +++ b/source/paint/pixel_buffer.cpp @@ -238,10 +238,18 @@ namespace nana{ namespace paint auto d = rawptr; const unsigned char* s; + int src_line_bytes; + if (is_negative) + { s = rawbits; + src_line_bytes = -static_cast(bytes_per_line); + } else + { s = rawbits + bytes_per_line * (height - 1); + src_line_bytes = static_cast(bytes_per_line); + } for(std::size_t i = 0; i < height; ++i) { @@ -256,7 +264,7 @@ namespace nana{ namespace paint s_p += 3; } d += pixel_size.width; - s -= bytes_per_line; + s -= src_line_bytes; } } else if(16 == bits_per_pixel)