X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/dcc36b34be1e1492894a5be7a027d99d3e74ebd9..c8074be06b2ee7cd5f6d7a90e6b4bf392415fc51:/src/common/imagpng.cpp diff --git a/src/common/imagpng.cpp b/src/common/imagpng.cpp index 009f133de9..21bcf6ee4d 100644 --- a/src/common/imagpng.cpp +++ b/src/common/imagpng.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: src/common/imagepng.cpp +// Name: src/common/imagpng.cpp // Purpose: wxImage PNG handler // Author: Robert Roebling // RCS-ID: $Id$ @@ -28,26 +28,16 @@ #ifndef WX_PRECOMP #include "wx/log.h" - #include "wx/app.h" - #include "wx/bitmap.h" - #include "wx/module.h" + #include "wx/intl.h" + #include "wx/palette.h" + #include "wx/stream.h" #endif #include "png.h" -#include "wx/filefn.h" -#include "wx/wfstream.h" -#include "wx/intl.h" -#include "wx/palette.h" // For memcpy #include -#ifdef __SALFORDC__ -#ifdef FAR -#undef FAR -#endif -#endif - // ---------------------------------------------------------------------------- // constants // ---------------------------------------------------------------------------- @@ -105,7 +95,9 @@ IMPLEMENT_DYNAMIC_CLASS(wxPNGHandler,wxImageHandler) #if wxUSE_STREAMS #ifndef PNGLINKAGEMODE - #ifdef __WATCOMC__ + #ifdef PNGAPI + #define PNGLINKAGEMODE PNGAPI + #elif defined(__WATCOMC__) // we need an explicit cdecl for Watcom, at least according to // // http://sf.net/tracker/index.php?func=detail&aid=651492&group_id=9863&atid=109863 @@ -748,6 +740,33 @@ bool wxPNGHandler::SaveFile( wxImage *image, wxOutputStream& stream, bool verbos if ( iBitDepth == 16 ) iElements *= 2; + // save the image resolution if we have it + int resX, resY; + switch ( GetResolutionFromOptions(*image, &resX, &resY) ) + { + case wxIMAGE_RESOLUTION_INCHES: + { + const double INCHES_IN_METER = 10000.0 / 254; + resX = int(resX * INCHES_IN_METER); + resY = int(resY * INCHES_IN_METER); + } + break; + + case wxIMAGE_RESOLUTION_CM: + resX *= 100; + resY *= 100; + break; + + case wxIMAGE_RESOLUTION_NONE: + break; + + default: + wxFAIL_MSG( _T("unsupported image resolution units") ); + } + + if ( resX && resY ) + png_set_pHYs( png_ptr, info_ptr, resX, resY, PNG_RESOLUTION_METER ); + png_set_sBIT( png_ptr, info_ptr, &sig_bit ); png_write_info( png_ptr, info_ptr ); png_set_shift( png_ptr, &sig_bit );