wxDIB(const wxBitmap& bmp)
{ Init(); (void)Create(bmp); }
+ // 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)
//
// as above, use IsOk() to see if the bitmap was loaded successfully
// same as the corresponding ctors but with return value
bool Create(int width, int height, int depth);
bool Create(const wxBitmap& bmp);
+ 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
{
wxCHECK_MSG( bmp.Ok(), false, _T("wxDIB::Create(): invalid bitmap") );
+ if ( !Create(GetHbitmapOf(bmp)) )
+ return false;
+
+ m_hasAlpha = bmp.HasAlpha();
+
+ return true;
+}
+
+bool wxDIB::Create(HBITMAP hbmp)
+{
// this bitmap could already be a DIB section in which case we don't need
// to convert it to DIB
- HBITMAP hbmp = GetHbitmapOf(bmp);
-
DIBSECTION ds;
if ( GetDIBSection(hbmp, &ds) )
{
}
else // no, it's a DDB -- convert it to DIB
{
- const int w = bmp.GetWidth();
- const int h = bmp.GetHeight();
- int d = bmp.GetDepth();
+ // prepare all the info we need
+ BITMAP bm;
+ if ( !::GetObject(hbmp, sizeof(bm), &bm) )
+ {
+ wxLogLastError(wxT("GetObject(bitmap)"));
+
+ return false;
+ }
+
+ int d = bm.bmBitsPixel;
if ( d <= 0 )
d = wxDisplayDepth();
- if ( !Create(w, h, d) || !CopyFromDDB(hbmp) )
+ if ( !Create(bm.bmWidth, bm.bmHeight, d) || !CopyFromDDB(hbmp) )
return false;
}
- m_hasAlpha = bmp.HasAlpha();
-
return true;
}