X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/77ffb5937e89927b621128789401db8921fe580f..98cb8dcb0cf3b0e660f1f67e1c02451ab10257de:/src/common/imagjpeg.cpp?ds=sidebyside diff --git a/src/common/imagjpeg.cpp b/src/common/imagjpeg.cpp index 76d85bf4f6..7e4dcedfba 100644 --- a/src/common/imagjpeg.cpp +++ b/src/common/imagjpeg.cpp @@ -1,16 +1,12 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: imagjpeg.cpp +// Name: src/common/imagjpeg.cpp // Purpose: wxImage JPEG handler // Author: Vaclav Slavik // RCS-ID: $Id$ // Copyright: (c) Vaclav Slavik -// Licence: wxWidgets licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma implementation "imagjpeg.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -28,12 +24,12 @@ #include "wx/log.h" #include "wx/app.h" -// NB: Some compilers define boolean type in Windows headers +// 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(__DIGITALMARS__) || (defined(__WATCOMC__) && __WATCOMC__ < 1200)) +#if defined(__WXMSW__) && (defined(__MWERKS__) || defined(__DIGITALMARS__)) #define HAVE_BOOLEAN #include "wx/msw/wrapwin.h" #endif @@ -226,7 +222,7 @@ bool wxJPEGHandler::LoadFile( wxImage *image, wxInputStream& stream, bool verbos (cinfo.src->term_source)(&cinfo); jpeg_destroy_decompress(&cinfo); if (image->Ok()) image->Destroy(); - return FALSE; + return false; } jpeg_create_decompress( &cinfo ); @@ -239,9 +235,9 @@ bool wxJPEGHandler::LoadFile( wxImage *image, wxInputStream& stream, bool verbos if (!image->Ok()) { jpeg_finish_decompress( &cinfo ); jpeg_destroy_decompress( &cinfo ); - return FALSE; + return false; } - image->SetMask( FALSE ); + image->SetMask( false ); ptr = image->GetData(); stride = cinfo.output_width * 3; tempbuf = (*cinfo.mem->alloc_sarray) @@ -254,7 +250,7 @@ bool wxJPEGHandler::LoadFile( wxImage *image, wxInputStream& stream, bool verbos } jpeg_finish_decompress( &cinfo ); jpeg_destroy_decompress( &cinfo ); - return TRUE; + return true; } typedef struct { @@ -338,7 +334,7 @@ bool wxJPEGHandler::SaveFile( wxImage *image, wxOutputStream& stream, bool verbo if (verbose) wxLogError(_("JPEG: Couldn't save image.")); jpeg_destroy_compress(&cinfo); - return FALSE; + return false; } jpeg_create_compress(&cinfo); @@ -356,22 +352,41 @@ bool wxJPEGHandler::SaveFile( wxImage *image, wxOutputStream& stream, bool verbo // 'Quality' is a number between 0 (terrible) and 100 (very good). // The default (in jcparam.c, jpeg_set_defaults) is 75, // and force_baseline is TRUE. - if (image->HasOption(wxT("quality"))) - jpeg_set_quality(&cinfo, image->GetOptionInt(wxT("quality")), TRUE); + if (image->HasOption(wxIMAGE_OPTION_QUALITY)) + jpeg_set_quality(&cinfo, image->GetOptionInt(wxIMAGE_OPTION_QUALITY), TRUE); + + // set the resolution fields in the output file + UINT16 resX, + resY; + if ( image->HasOption(wxIMAGE_OPTION_RESOLUTIONX) && + image->HasOption(wxIMAGE_OPTION_RESOLUTIONY) ) + { + resX = (UINT16)image->GetOptionInt(wxIMAGE_OPTION_RESOLUTIONX); + resY = (UINT16)image->GetOptionInt(wxIMAGE_OPTION_RESOLUTIONY); + } + else if ( image->HasOption(wxIMAGE_OPTION_RESOLUTION) ) + { + resX = + resY = (UINT16)image->GetOptionInt(wxIMAGE_OPTION_RESOLUTION); + } + else + { + resX = + resY = 0; + } - // sets the resolution fields in the output file - if (image->HasOption(wxIMAGE_OPTION_RESOLUTION)) + if ( resX && resY ) { - cinfo.X_density = - cinfo.Y_density = image->GetOptionInt(wxIMAGE_OPTION_RESOLUTION); + cinfo.X_density = resX; + cinfo.Y_density = resY; } // 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)) + if ( image->HasOption(wxIMAGE_OPTION_RESOLUTIONUNIT) ) { - cinfo.density_unit = image->GetOptionInt(wxIMAGE_OPTION_RESOLUTIONUNIT); + cinfo.density_unit = (UINT8)image->GetOptionInt(wxIMAGE_OPTION_RESOLUTIONUNIT); } jpeg_start_compress(&cinfo, TRUE); @@ -385,7 +400,7 @@ bool wxJPEGHandler::SaveFile( wxImage *image, wxOutputStream& stream, bool verbo jpeg_finish_compress(&cinfo); jpeg_destroy_compress(&cinfo); - return TRUE; + return true; } #ifdef __VISUALC__ @@ -397,7 +412,7 @@ bool wxJPEGHandler::DoCanRead( wxInputStream& stream ) unsigned char hdr[2]; if ( !stream.Read(hdr, WXSIZEOF(hdr)) ) - return FALSE; + return false; return hdr[0] == 0xFF && hdr[1] == 0xD8; } @@ -405,9 +420,3 @@ bool wxJPEGHandler::DoCanRead( wxInputStream& stream ) #endif // wxUSE_STREAMS #endif // wxUSE_LIBJPEG - - - - - -