added wxDIB(HBITMAP) ctor and corresponding Create(); made GetData() return uchar * and not void *
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@28390 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -41,6 +41,10 @@ public:
|
|||||||
wxDIB(const wxBitmap& bmp)
|
wxDIB(const wxBitmap& bmp)
|
||||||
{ Init(); (void)Create(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)
|
// load a DIB from file (any depth is supoprted here unlike above)
|
||||||
//
|
//
|
||||||
// as above, use IsOk() to see if the bitmap was loaded successfully
|
// 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
|
// same as the corresponding ctors but with return value
|
||||||
bool Create(int width, int height, int depth);
|
bool Create(int width, int height, int depth);
|
||||||
bool Create(const wxBitmap& bmp);
|
bool Create(const wxBitmap& bmp);
|
||||||
|
bool Create(HBITMAP hbmp);
|
||||||
bool Load(const wxString& filename);
|
bool Load(const wxString& filename);
|
||||||
|
|
||||||
// dtor is not virtual, this class is not meant to be used polymorphically
|
// dtor is not virtual, this class is not meant to be used polymorphically
|
||||||
@@ -60,7 +65,7 @@ public:
|
|||||||
// ----------
|
// ----------
|
||||||
|
|
||||||
#ifndef __WXWINCE__
|
#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
|
// return its handle, the caller is responsible for freeing it (using
|
||||||
// DeleteObject())
|
// DeleteObject())
|
||||||
HBITMAP CreateDDB(HDC hdc = 0) const;
|
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
|
// get raw pointer to bitmap bits, you should know what you do if you
|
||||||
// decide to use it
|
// decide to use it
|
||||||
void *GetData() const { DoGetObject(); return m_data; }
|
unsigned char *GetData() const
|
||||||
|
{ DoGetObject(); return (unsigned char *)m_data; }
|
||||||
|
|
||||||
|
|
||||||
// HBITMAP conversion
|
// HBITMAP conversion
|
||||||
|
@@ -151,10 +151,18 @@ bool wxDIB::Create(const wxBitmap& bmp)
|
|||||||
{
|
{
|
||||||
wxCHECK_MSG( bmp.Ok(), false, _T("wxDIB::Create(): invalid bitmap") );
|
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
|
// this bitmap could already be a DIB section in which case we don't need
|
||||||
// to convert it to DIB
|
// to convert it to DIB
|
||||||
HBITMAP hbmp = GetHbitmapOf(bmp);
|
|
||||||
|
|
||||||
DIBSECTION ds;
|
DIBSECTION ds;
|
||||||
if ( GetDIBSection(hbmp, &ds) )
|
if ( GetDIBSection(hbmp, &ds) )
|
||||||
{
|
{
|
||||||
@@ -172,17 +180,22 @@ bool wxDIB::Create(const wxBitmap& bmp)
|
|||||||
}
|
}
|
||||||
else // no, it's a DDB -- convert it to DIB
|
else // no, it's a DDB -- convert it to DIB
|
||||||
{
|
{
|
||||||
const int w = bmp.GetWidth();
|
// prepare all the info we need
|
||||||
const int h = bmp.GetHeight();
|
BITMAP bm;
|
||||||
int d = bmp.GetDepth();
|
if ( !::GetObject(hbmp, sizeof(bm), &bm) )
|
||||||
if ( d <= 0 )
|
{
|
||||||
d = wxDisplayDepth();
|
wxLogLastError(wxT("GetObject(bitmap)"));
|
||||||
|
|
||||||
if ( !Create(w, h, d) || !CopyFromDDB(hbmp) )
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_hasAlpha = bmp.HasAlpha();
|
int d = bm.bmBitsPixel;
|
||||||
|
if ( d <= 0 )
|
||||||
|
d = wxDisplayDepth();
|
||||||
|
|
||||||
|
if ( !Create(bm.bmWidth, bm.bmHeight, d) || !CopyFromDDB(hbmp) )
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user