Mercurial > jwe > octave
changeset 21767:f00204dae6ee stable
Round quantized pixel values before writing uintN images (bug #47746)
* __magick_read__.cc (encode_uint_image): Round quantized pixel values to
prevent round-off error when GraphicsMagick quantum depth is greater than 8.
author | Mike Miller <mtmiller@octave.org> |
---|---|
date | Mon, 23 May 2016 10:44:52 -0700 |
parents | 212783dc8c9a |
children | 7190a26977cb 7496bd7265d9 |
files | libinterp/corefcn/__magick_read__.cc |
diffstat | 1 files changed, 19 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/libinterp/corefcn/__magick_read__.cc Fri May 20 11:53:15 2016 -0700 +++ b/libinterp/corefcn/__magick_read__.cc Mon May 23 10:44:52 2016 -0700 @@ -1109,7 +1109,7 @@ { for (octave_idx_type row = 0; row < nRows; row++) { - const double grey = double (*img_fvec) / divisor; + const double grey = xround (double (*img_fvec) / divisor); Magick::Color c (grey, grey, grey); pix[GM_idx] = c; img_fvec++; @@ -1139,9 +1139,9 @@ { for (octave_idx_type row = 0; row < nRows; row++) { - double grey = double (*img_fvec) / divisor; + double grey = xround (double (*img_fvec) / divisor); Magick::Color c (grey, grey, grey, - MaxRGB - (double (*a_fvec) / divisor)); + MaxRGB - xround (double (*a_fvec) / divisor)); pix[GM_idx] = c; img_fvec++; a_fvec++; @@ -1174,9 +1174,9 @@ { for (octave_idx_type row = 0; row < nRows; row++) { - Magick::Color c (double (*img_fvec) / divisor, - double (img_fvec[G_offset]) / divisor, - double (img_fvec[B_offset]) / divisor); + Magick::Color c (xround (double (*img_fvec) / divisor), + xround (double (img_fvec[G_offset]) / divisor), + xround (double (img_fvec[B_offset]) / divisor)); pix[GM_idx] = c; img_fvec++; GM_idx += nCols; @@ -1209,10 +1209,10 @@ { for (octave_idx_type row = 0; row < nRows; row++) { - Magick::Color c (double (*img_fvec) / divisor, - double (img_fvec[G_offset]) / divisor, - double (img_fvec[B_offset]) / divisor, - MaxRGB - (double (*a_fvec) / divisor)); + Magick::Color c (xround (double (*img_fvec) / divisor), + xround (double (img_fvec[G_offset]) / divisor), + xround (double (img_fvec[B_offset]) / divisor), + MaxRGB - xround (double (*a_fvec) / divisor)); pix[GM_idx] = c; img_fvec++; a_fvec++; @@ -1247,10 +1247,10 @@ { for (octave_idx_type row = 0; row < nRows; row++) { - Magick::Color c (double (*img_fvec) / divisor, - double (img_fvec[M_offset]) / divisor, - double (img_fvec[Y_offset]) / divisor, - double (img_fvec[K_offset]) / divisor); + Magick::Color c (xround (double (*img_fvec) / divisor), + xround (double (img_fvec[M_offset]) / divisor), + xround (double (img_fvec[Y_offset]) / divisor), + xround (double (img_fvec[K_offset]) / divisor)); pix[GM_idx] = c; img_fvec++; GM_idx += nCols; @@ -1285,12 +1285,12 @@ { for (octave_idx_type row = 0; row < nRows; row++) { - Magick::Color c (double (*img_fvec) / divisor, - double (img_fvec[M_offset]) / divisor, - double (img_fvec[Y_offset]) / divisor, - double (img_fvec[K_offset]) / divisor); + Magick::Color c (xround (double (*img_fvec) / divisor), + xround (double (img_fvec[M_offset]) / divisor), + xround (double (img_fvec[Y_offset]) / divisor), + xround (double (img_fvec[K_offset]) / divisor)); pix[GM_idx] = c; - ind[GM_idx] = MaxRGB - (double (*a_fvec) / divisor); + ind[GM_idx] = MaxRGB - xround (double (*a_fvec) / divisor); img_fvec++; a_fvec++; GM_idx += nCols;