#include "wx/log.h"
#include "wx/intl.h"
#include "wx/bitmap.h"
+ #include "wx/image.h"
#endif //WX_PRECOMP
#include "wx/file.h"
#include <stdio.h>
#include <stdlib.h>
-#if !defined(__MWERKS__) && !defined(__SALFORDC__)
+#if !defined(__MWERKS__)
#include <memory.h>
#endif
-#include "wx/image.h"
#include "wx/msw/dib.h"
#ifdef __WXWINCE__
m_handle = (HBITMAP)::LoadImage
(
wxGetInstance(),
- filename,
+ filename.fn_str(),
IMAGE_BITMAP,
0, 0, // don't specify the size
LR_CREATEDIBSECTION | LR_LOADFROMFILE
{
wxCHECK_MSG( m_handle, false, _T("wxDIB::Save(): invalid object") );
+#if wxUSE_FILE
wxFile file(filename, wxFile::write);
bool ok = file.IsOpened();
if ( ok )
file.Write(ds.dsBm.bmBits, sizeImage) == sizeImage;
}
}
+#else // !wxUSE_FILE
+ bool ok = false;
+#endif // wxUSE_FILE/!wxUSE_FILE
if ( !ok )
{
dst[1] = *src++;
dst[0] = *src++;
- dst += 3;
-
if ( is32bit )
{
if ( alpha )
- *alpha++ = *src;
+ {
+ // wxImage uses non premultiplied alpha so undo
+ // premultiplication done in Create() above
+ const unsigned char a = *src;
+ *alpha++ = a;
+ if ( a > 0 )
+ {
+ dst[0] = (dst[0] * 255) / a;
+ dst[1] = (dst[1] * 255) / a;
+ dst[2] = (dst[2] * 255) / a;
+ }
+ }
+
src++;
}
+
+ dst += 3;
}
// pass to the previous line in the image