avoid unnecessary heap allocation of BITMAPINFO struct
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@55377 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -96,39 +96,33 @@ bool wxDIB::Create(int width, int height, int depth)
|
|||||||
depth = 24;
|
depth = 24;
|
||||||
|
|
||||||
// allocate memory for bitmap structures
|
// allocate memory for bitmap structures
|
||||||
static const int sizeHeader = sizeof(BITMAPINFOHEADER);
|
BITMAPINFO info;
|
||||||
|
wxZeroMemory(info);
|
||||||
|
|
||||||
BITMAPINFO *info = (BITMAPINFO *)malloc(sizeHeader);
|
info.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
|
||||||
wxCHECK_MSG( info, false, _T("malloc(BITMAPINFO) failed") );
|
info.bmiHeader.biWidth = width;
|
||||||
|
|
||||||
memset(info, 0, sizeHeader);
|
|
||||||
|
|
||||||
info->bmiHeader.biSize = sizeHeader;
|
|
||||||
info->bmiHeader.biWidth = width;
|
|
||||||
|
|
||||||
// we use positive height here which corresponds to a DIB with normal, i.e.
|
// we use positive height here which corresponds to a DIB with normal, i.e.
|
||||||
// bottom to top, order -- normally using negative height (which means
|
// bottom to top, order -- normally using negative height (which means
|
||||||
// reversed for MS and hence natural for all the normal people top to
|
// reversed for MS and hence natural for all the normal people top to
|
||||||
// bottom line scan order) could be used to avoid the need for the image
|
// bottom line scan order) could be used to avoid the need for the image
|
||||||
// reversal in Create(image) but this doesn't work under NT, only Win9x!
|
// reversal in Create(image) but this doesn't work under NT, only Win9x!
|
||||||
info->bmiHeader.biHeight = height;
|
info.bmiHeader.biHeight = height;
|
||||||
|
|
||||||
info->bmiHeader.biPlanes = 1;
|
info.bmiHeader.biPlanes = 1;
|
||||||
info->bmiHeader.biBitCount = (WORD)depth;
|
info.bmiHeader.biBitCount = (WORD)depth;
|
||||||
info->bmiHeader.biSizeImage = GetLineSize(width, depth)*height;
|
info.bmiHeader.biSizeImage = GetLineSize(width, depth)*height;
|
||||||
|
|
||||||
m_handle = ::CreateDIBSection
|
m_handle = ::CreateDIBSection
|
||||||
(
|
(
|
||||||
0, // hdc (unused with DIB_RGB_COLORS)
|
0, // hdc (unused with DIB_RGB_COLORS)
|
||||||
info, // bitmap description
|
&info, // bitmap description
|
||||||
DIB_RGB_COLORS, // use RGB, not palette
|
DIB_RGB_COLORS, // use RGB, not palette
|
||||||
&m_data, // [out] DIB bits
|
&m_data, // [out] DIB bits
|
||||||
NULL, // don't use file mapping
|
NULL, // don't use file mapping
|
||||||
0 // file mapping offset (not used here)
|
0 // file mapping offset (not used here)
|
||||||
);
|
);
|
||||||
|
|
||||||
free(info);
|
|
||||||
|
|
||||||
if ( !m_handle )
|
if ( !m_handle )
|
||||||
{
|
{
|
||||||
wxLogLastError(wxT("CreateDIBSection"));
|
wxLogLastError(wxT("CreateDIBSection"));
|
||||||
|
Reference in New Issue
Block a user