X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/39d16996b7616bf8090b140db74fd0b52d50d169..2659dad3209167f248dcae39a7ee25d2f8c91ff9:/src/common/imagjpeg.cpp diff --git a/src/common/imagjpeg.cpp b/src/common/imagjpeg.cpp index c2525bae43..d2d50a0e5d 100644 --- a/src/common/imagjpeg.cpp +++ b/src/common/imagjpeg.cpp @@ -7,7 +7,7 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "imagjpeg.h" #endif @@ -28,17 +28,21 @@ #include "wx/log.h" #include "wx/app.h" -// NB: Some compilers define boolean type in Windows headers (e.g. Watcom C++). +// NB: Some compilers define boolean type in Windows headers +// (e.g. Watcom C++, but not Open Watcom). // This causes a conflict with jmorecfg.h header from libjpeg, so we have // to make sure libjpeg won't try to define boolean itself. This is done by // defining HAVE_BOOLEAN. -#if defined(__WXMSW__) && (defined(__MWERKS__) || defined(__WATCOMC__)) +#if defined(__WXMSW__) && (defined(__MWERKS__) || defined(__DIGITALMARS__) || (defined(__WATCOMC__) && __WATCOMC__ < 1200)) #define HAVE_BOOLEAN - #include + #include "wx/msw/wrapwin.h" #endif extern "C" { + #if defined(__WXMSW__) + #define XMD_H + #endif #include "jpeglib.h" } @@ -177,7 +181,6 @@ void jpeg_wxio_src( j_decompress_ptr cinfo, wxInputStream& infile ) cinfo->src = (struct jpeg_source_mgr *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, sizeof(my_source_mgr)); - src = (my_src_ptr) cinfo->src; } src = (my_src_ptr) cinfo->src; src->pub.bytes_in_buffer = 0; /* forces fill_input_buffer on first read */ @@ -356,6 +359,21 @@ bool wxJPEGHandler::SaveFile( wxImage *image, wxOutputStream& stream, bool verbo if (image->HasOption(wxT("quality"))) jpeg_set_quality(&cinfo, image->GetOptionInt(wxT("quality")), TRUE); + // sets the resolution fields in the output file + if (image->HasOption(wxIMAGE_OPTION_RESOLUTION)) + { + cinfo.X_density = + cinfo.Y_density = image->GetOptionInt(wxIMAGE_OPTION_RESOLUTION); + } + + // sets the resolution unit field in the output file + // wxIMAGE_RESOLUTION_INCHES for inches + // wxIMAGE_RESOLUTION_CM for centimeters + if (image->HasOption(wxIMAGE_OPTION_RESOLUTIONUNIT)) + { + cinfo.density_unit = image->GetOptionInt(wxIMAGE_OPTION_RESOLUTIONUNIT); + } + jpeg_start_compress(&cinfo, TRUE); stride = cinfo.image_width * 3; /* JSAMPLEs per row in image_buffer */