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:
Vadim Zeitlin
2008-08-30 16:31:31 +00:00
parent d3acc83ae9
commit ee56d68c45

View File

@@ -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"));