From 3a278a672169bbf401c5139b97def0afe4a1d5e6 Mon Sep 17 00:00:00 2001 From: Adrian Johnson Date: Wed, 25 Jan 2012 22:44:27 +1030 Subject: [PATCH] jpeg: set image parameters after jpeg_set_defaults() so the resolution does not get overwritten by the defaults. The libjpeg documentation for jpeg_set_defaults() states: "This routine sets all JPEG parameters to reasonable defaults, using only the input image's color space (field in_color_space, which must already be set in cinfo)" Bug 45224 --- goo/JpegWriter.cc | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) diff --git a/goo/JpegWriter.cc b/goo/JpegWriter.cc index 7ed5d52..aa11d8a 100644 --- a/goo/JpegWriter.cc +++ b/goo/JpegWriter.cc @@ -53,6 +53,10 @@ bool JpegWriter::init(FILE *f, int width, int height, int hDPI, int vDPI) // Initialize libjpeg jpeg_create_compress(&cinfo); + // Set colorspace and initialise defaults + cinfo.in_color_space = colorMode; /* colorspace of input image */ + jpeg_set_defaults(&cinfo); + // Set destination file jpeg_stdio_dest(&cinfo, f); @@ -62,7 +66,6 @@ bool JpegWriter::init(FILE *f, int width, int height, int hDPI, int vDPI) cinfo.density_unit = 1; // dots per inch cinfo.X_density = hDPI; cinfo.Y_density = vDPI; - cinfo.in_color_space = colorMode; /* colorspace of input image */ /* # of color components per pixel */ switch (colorMode) { case JCS_GRAYSCALE: @@ -77,7 +80,6 @@ bool JpegWriter::init(FILE *f, int width, int height, int hDPI, int vDPI) default: return false; } - jpeg_set_defaults(&cinfo); if (cinfo.in_color_space == JCS_CMYK) { jpeg_set_colorspace(&cinfo, JCS_YCCK); cinfo.write_JFIF_header = TRUE; -- 1.7.5.4