mirror of
https://github.com/wxWidgets/wxWidgets.git
synced 2026-09-23 06:33:59 +08:00
added wxDIB::Save() and wxDIB to/from wxBitmap) conversions, use them instead of the old C functions (the latter were removed, there is no old code left any more)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@19744 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
+17
-14
@@ -35,6 +35,10 @@ public:
|
||||
wxDIB(int width, int height, int depth)
|
||||
{ Init(); (void)Create(width, height, depth); }
|
||||
|
||||
// create a DIB from the DDB
|
||||
wxDIB(const wxBitmap& bmp)
|
||||
{ Init(); (void)Create(bmp); }
|
||||
|
||||
// load a DIB from file (any depth is supoprted here unlike above)
|
||||
//
|
||||
// as above, use IsOk() to see if the bitmap was loaded successfully
|
||||
@@ -43,6 +47,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 Load(const wxString& filename);
|
||||
|
||||
// dtor is not virtual, this class is not meant to be used polymorphically
|
||||
@@ -66,6 +71,9 @@ public:
|
||||
wxPalette *CreatePalette() const;
|
||||
#endif // wxUSE_PALETTE
|
||||
|
||||
// save the DIB as a .BMP file to the file with the given name
|
||||
bool Save(const wxString& filename);
|
||||
|
||||
|
||||
// accessors
|
||||
// ---------
|
||||
@@ -92,8 +100,8 @@ public:
|
||||
// HBITMAP conversion
|
||||
// ------------------
|
||||
|
||||
// these functions are only used by wxBitmapDataObject implementation in
|
||||
// src/msw/ole/dataobj.cpp, don't use them directly if possible
|
||||
// these functions are only used by wxWindows internally right now, please
|
||||
// don't use them directly if possible as they're subject to change
|
||||
|
||||
// creates a DDB compatible with the given (or screen) DC from either
|
||||
// a plain DIB or a DIB section (in which case the last parameter must be
|
||||
@@ -102,12 +110,18 @@ public:
|
||||
HDC hdc = 0,
|
||||
void *bits = NULL);
|
||||
|
||||
// create a plain DIB (not a DIB section) from a DDB, the caller is
|
||||
// responsable for freeing it using ::GlobalFree()
|
||||
static HGLOBAL ConvertFromBitmap(HBITMAP hbmp);
|
||||
|
||||
// creates a DIB from the given DDB or calculates the space needed by it:
|
||||
// if pbi is NULL, only the space is calculated, otherwise pbi is supposed
|
||||
// to point at BITMAPINFO of the correct size which is filled by this
|
||||
// function
|
||||
// function (this overload is needed for wxBitmapDataObject code in
|
||||
// src/msw/ole/dataobj.cpp)
|
||||
static size_t ConvertFromBitmap(BITMAPINFO *pbi, HBITMAP hbmp);
|
||||
|
||||
|
||||
// wxImage conversion
|
||||
// ------------------
|
||||
|
||||
@@ -199,16 +213,5 @@ inline wxDIB::~wxDIB()
|
||||
Free();
|
||||
}
|
||||
|
||||
// the rest is defined in dib.cpp
|
||||
|
||||
// Save (device dependent) wxBitmap as a DIB
|
||||
bool wxSaveBitmap(wxChar *filename, wxBitmap *bitmap, wxPalette *palette = NULL);
|
||||
|
||||
HANDLE wxBitmapToDIB (HBITMAP hBitmap, HPALETTE hPal);
|
||||
bool wxReadDIB(LPTSTR lpFileName, HBITMAP *bitmap, HPALETTE *palette);
|
||||
HANDLE wxReadDIB2(LPTSTR lpFileName);
|
||||
LPSTR wxFindDIBBits (LPSTR lpbi);
|
||||
HPALETTE wxMakeDIBPalette(LPBITMAPINFOHEADER lpInfo);
|
||||
|
||||
#endif // _WX_MSW_DIB_H_
|
||||
|
||||
|
||||
@@ -487,7 +487,6 @@ bool wxBitmap::DoCreate(int w, int h, int d, WXHDC hdc)
|
||||
hbmp = dib.Detach();
|
||||
|
||||
GetBitmapData()->m_depth = d;
|
||||
GetBitmapData()->m_hasAlpha = d == 32; // 32bpp DIBs have alpha channel
|
||||
}
|
||||
else // create a DDB
|
||||
{
|
||||
|
||||
+6
-6
@@ -220,13 +220,13 @@ bool wxSetClipboardData(wxDataFormat dataFormat,
|
||||
|
||||
case wxDF_DIB:
|
||||
{
|
||||
#if wxUSE_IMAGE_LOADING_IN_MSW
|
||||
wxBitmap *bitmap = (wxBitmap *)data;
|
||||
HBITMAP hBitmap = (HBITMAP)bitmap->GetHBITMAP();
|
||||
// NULL palette means to use the system one
|
||||
HANDLE hDIB = wxBitmapToDIB(hBitmap, (HPALETTE)NULL);
|
||||
handle = SetClipboardData(CF_DIB, hDIB);
|
||||
#endif // wxUSE_IMAGE_LOADING_IN_MSW
|
||||
|
||||
HGLOBAL hDIB = wxDIB::ConvertFromBitmap(GetHbitmapOf(*bitmap));
|
||||
if ( hDIB )
|
||||
{
|
||||
handle = ::SetClipboardData(CF_DIB, hDIB);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
+132
-670
File diff suppressed because it is too large
Load Diff
+4
-13
@@ -355,22 +355,13 @@ bool wxBMPFileHandler::LoadFile(wxBitmap *bitmap,
|
||||
bool wxBMPFileHandler::SaveFile(wxBitmap *bitmap,
|
||||
const wxString& name,
|
||||
int WXUNUSED(type),
|
||||
const wxPalette *pal)
|
||||
const wxPalette * WXUNUSED(pal))
|
||||
{
|
||||
#if wxUSE_IMAGE_LOADING_IN_MSW
|
||||
wxCHECK_MSG( bitmap, false, _T("NULL bitmap in SaveFile") );
|
||||
|
||||
#if wxUSE_PALETTE
|
||||
wxPalette *actualPalette = (wxPalette *)pal;
|
||||
if ( !actualPalette )
|
||||
actualPalette = bitmap->GetPalette();
|
||||
#else
|
||||
wxPalette *actualPalette = NULL;
|
||||
#endif // wxUSE_PALETTE
|
||||
wxDIB dib(*bitmap);
|
||||
|
||||
return wxSaveBitmap(WXSTRINGCAST name, bitmap, actualPalette) != 0;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
return dib.Save(name);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
+10
-14
@@ -1103,20 +1103,16 @@ WXHBITMAP wxToolBar::CreateMappedBitmap(WXHINSTANCE WXUNUSED(hInstance), void *i
|
||||
|
||||
WXHBITMAP wxToolBar::CreateMappedBitmap(WXHINSTANCE hInstance, WXHBITMAP hBitmap)
|
||||
{
|
||||
HANDLE hDIB = wxBitmapToDIB((HBITMAP) hBitmap, 0);
|
||||
if (hDIB)
|
||||
{
|
||||
#ifdef __WINDOWS_386__
|
||||
LPBITMAPINFOHEADER lpbmInfoHdr = (LPBITMAPINFOHEADER)MK_FP32(GlobalLock(hDIB));
|
||||
#else
|
||||
LPBITMAPINFOHEADER lpbmInfoHdr = (LPBITMAPINFOHEADER)GlobalLock(hDIB);
|
||||
#endif
|
||||
HBITMAP newBitmap = (HBITMAP) CreateMappedBitmap((WXHINSTANCE) wxGetInstance(), lpbmInfoHdr);
|
||||
GlobalUnlock(hDIB);
|
||||
HANDLE hDIB = wxDIB::ConvertFromBitmap((HBITMAP) hBitmap);
|
||||
if ( !hDIB )
|
||||
return 0;
|
||||
|
||||
WXHBITMAP newBitmap = CreateMappedBitmap(hInstance, GlobalHandle(hDIB));
|
||||
|
||||
GlobalFree(hDIB);
|
||||
return (WXHBITMAP) newBitmap;
|
||||
}
|
||||
return 0;
|
||||
|
||||
return newBitmap;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif // wxUSE_TOOLBAR
|
||||
|
||||
|
||||
Reference in New Issue
Block a user