summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-07-09 23:43:22 +0100
committerCarl Hetherington <cth@carlh.net>2013-07-09 23:43:22 +0100
commit4c494156cc416ac46dde1bfc7e694802bad30c3e (patch)
tree213ff7ac451766d5a6527039a73dc104457c8f56 /src/lib
parentea27667ae1c479ae73d7626a9fbef7e825f12655 (diff)
Fix cropping of YUV images by amounts that are finer than the U/V resolution (and add a test for that).
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/image.cc6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/lib/image.cc b/src/lib/image.cc
index 0eabbe84d..ac30f4ff0 100644
--- a/src/lib/image.cc
+++ b/src/lib/image.cc
@@ -214,7 +214,11 @@ Image::crop (Crop crop, bool aligned) const
for (int c = 0; c < components(); ++c) {
int const crop_left_in_bytes = bytes_per_pixel(c) * crop.left;
- int const cropped_width_in_bytes = bytes_per_pixel(c) * cropped_size.width;
+ /* bytes_per_pixel() could be a fraction; in this case the stride will be rounded
+ up, and we need to make sure that we copy over the width (up to the stride)
+ rather than short of the width; hence the ceil() here.
+ */
+ int const cropped_width_in_bytes = ceil (bytes_per_pixel(c) * cropped_size.width);
/* Start of the source line, cropped from the top but not the left */
uint8_t* in_p = data()[c] + (crop.top / out->line_factor(c)) * stride()[c];