]> git.saurik.com Git - wxWidgets.git/commitdiff
added wxDIB(HBITMAP) ctor and corresponding Create(); made GetData() return uchar...
authorVadim Zeitlin <vadim@wxwidgets.org>
Thu, 22 Jul 2004 11:43:57 +0000 (11:43 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Thu, 22 Jul 2004 11:43:57 +0000 (11:43 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@28390 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/msw/dib.h
src/msw/dib.cpp

index 48f9382010f4d266e6b2077326ea8dd6d200161f..0a9fd4587a9a8287382075eec35e35b7cc69e6fe 100644 (file)
@@ -41,6 +41,10 @@ public:
     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
@@ -50,6 +54,7 @@ public:
     // 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
@@ -60,7 +65,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 +103,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
index 2e0eeddd7be137e2494788e2dddb346f74c15c24..a7eebe54f289994fbfbf2ab031ac38b2f2adb2b4 100644 (file)
@@ -151,10 +151,18 @@ bool wxDIB::Create(const wxBitmap& bmp)
 {
     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) )
     {
@@ -172,18 +180,23 @@ bool wxDIB::Create(const wxBitmap& bmp)
     }
     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;
 }