/////////////////////////////////////////////////////////////////////////////
-// Name: src/common/imagepng.cpp
+// Name: src/common/imagpng.cpp
// Purpose: wxImage PNG handler
// Author: Robert Roebling
// RCS-ID: $Id$
#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 <string.h>
-#ifdef __SALFORDC__
-#ifdef FAR
-#undef FAR
-#endif
-#endif
-
// ----------------------------------------------------------------------------
// constants
// ----------------------------------------------------------------------------
#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
r2 = *p++;
g2 = *p++;
b2 = *p++;
+ ++p; // jump over alpha
wxImageHistogramEntry&
entry = h[wxImageHistogram:: MakeKey(r2, g2, b2)];
if ( IsTransparent(a) )
{
*ptrDst++ = rMask;
- *ptrDst++ = bMask;
*ptrDst++ = gMask;
+ *ptrDst++ = bMask;
break;
}
// else: !transparent
if ( IsTransparent(a) )
{
*ptrDst++ = rMask;
- *ptrDst++ = bMask;
*ptrDst++ = gMask;
+ *ptrDst++ = bMask;
break;
}
else // !transparent
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 );