X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/77ffb5937e89927b621128789401db8921fe580f..0ecd03525b34edba886ca83ff724265cd912dbbd:/include/wx/msw/dib.h diff --git a/include/wx/msw/dib.h b/include/wx/msw/dib.h index c11e4e4d72..fcfce370fd 100644 --- a/include/wx/msw/dib.h +++ b/include/wx/msw/dib.h @@ -6,24 +6,27 @@ // Created: 03.03.03 (replaces the old file with the same name) // RCS-ID: $Id$ // Copyright: (c) 1997-2003 wxWidgets team -// Licence: wxWidgets licence +// 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 @@ -37,9 +40,15 @@ public: 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) // @@ -49,7 +58,10 @@ public: // 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 @@ -60,7 +72,7 @@ public: // ---------- #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; @@ -98,7 +110,8 @@ public: // 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 @@ -132,12 +145,28 @@ public: // ------------------ #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;