// Author: Vadim Zeitlin
// Modified by:
// Created: 03.03.03 (replaces the old file with the same name)
-// RCS-ID: $Id$
// Copyright: (c) 1997-2003 wxWidgets team
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_MSW_DIB_H_
#define _WX_MSW_DIB_H_
-class WXDLLEXPORT wxBitmap;
-class WXDLLEXPORT wxPalette;
+class WXDLLIMPEXP_FWD_CORE wxPalette;
#include "wx/msw/private.h"
#if wxUSE_WXDIB
+#ifdef __WXMSW__
+ #include "wx/bitmap.h"
+#endif // __WXMSW__
+
// ----------------------------------------------------------------------------
// wxDIB: represents a DIB section
// ----------------------------------------------------------------------------
-class WXDLLEXPORT wxDIB
+class WXDLLIMPEXP_CORE wxDIB
{
public:
// ctors and such
wxDIB(int width, int height, int depth)
{ Init(); (void)Create(width, height, depth); }
+#ifdef __WXMSW__
// create a DIB from the DDB
wxDIB(const wxBitmap& bmp)
{ Init(); (void)Create(bmp); }
+#endif // __WXMSW__
+
+ // create a DIB from the Windows DDB
+ wxDIB(HBITMAP hbmp)
+ { Init(); (void)Create(hbmp); }
// load a DIB from file (any depth is supoprted here unlike above)
//
// same as the corresponding ctors but with return value
bool Create(int width, int height, int depth);
- bool Create(const wxBitmap& bmp);
+#ifdef __WXMSW__
+ bool Create(const wxBitmap& bmp) { return Create(GetHbitmapOf(bmp)); }
+#endif
+ bool Create(HBITMAP hbmp);
bool Load(const wxString& filename);
// dtor is not virtual, this class is not meant to be used polymorphically
// ----------
#ifndef __WXWINCE__
- // create a bitmap compatiblr with the given HDC (or screen by default) and
+ // create a bitmap compatible with the given HDC (or screen by default) and
// return its handle, the caller is responsible for freeing it (using
// DeleteObject())
HBITMAP CreateDDB(HDC hdc = 0) const;
// get raw pointer to bitmap bits, you should know what you do if you
// decide to use it
- void *GetData() const { DoGetObject(); return m_data; }
+ unsigned char *GetData() const
+ { DoGetObject(); return (unsigned char *)m_data; }
// HBITMAP conversion
// ------------------
#if wxUSE_IMAGE
- // create a DIB from the given image, the DIB will be either 24 or 32 (if
- // the image has alpha channel) bpp
- wxDIB(const wxImage& image) { Init(); (void)Create(image); }
+ // Possible formats for DIBs created by the functions below.
+ enum PixelFormat
+ {
+ PixelFormat_PreMultiplied = 0,
+ PixelFormat_NotPreMultiplied = 1
+ };
+
+ // Create a DIB from the given image, the DIB will be either 24 or 32 (if
+ // the image has alpha channel) bpp.
+ //
+ // By default the DIB stores pixel data in pre-multiplied format so that it
+ // can be used with ::AlphaBlend() but it is also possible to disable
+ // pre-multiplication for the DIB to be usable with ImageList_Draw() which
+ // does pre-multiplication internally.
+ wxDIB(const wxImage& image, PixelFormat pf = PixelFormat_PreMultiplied)
+ {
+ Init();
+ (void)Create(image, pf);
+ }
// same as the above ctor but with the return code
- bool Create(const wxImage& image);
+ bool Create(const wxImage& image, PixelFormat pf = PixelFormat_PreMultiplied);
// create wxImage having the same data as this DIB
wxImage ConvertToImage() const;
// the case
bool m_ownsHandle;
- // if true, we have alpha, if false we don't (note that we can still have
- // m_depth == 32 but the last component is then simply padding and not
- // alpha)
- bool m_hasAlpha;
-
// DIBs can't be copied
wxDIB(const wxDIB&);
{
m_handle = 0;
m_ownsHandle = true;
- m_hasAlpha = false;
m_data = NULL;