diff options
| author | Carl Hetherington <cth@carlh.net> | 2013-07-09 23:43:22 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2013-07-09 23:43:22 +0100 |
| commit | 4c494156cc416ac46dde1bfc7e694802bad30c3e (patch) | |
| tree | 213ff7ac451766d5a6527039a73dc104457c8f56 /src | |
| parent | ea27667ae1c479ae73d7626a9fbef7e825f12655 (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')
| -rw-r--r-- | src/lib/image.cc | 6 |
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]; |
