16,551
社区成员
发帖
与我相关
我的任务
分享
HBITMAP GetBitmapFromBuffer(BYTE* pBmpData)
{
if ( pBmpData == NULL )
{
return NULL;
}
BITMAPFILEHEADER bmpHeader; //位图头结构
DWORD dwHeaderLen = sizeof(BITMAPFILEHEADER);
memcpy( &bmpHeader, pBmpData, dwHeaderLen );
if( bmpHeader.bfType != 0x4D42 ) // "BM" // 设置位图文件头
{
ASSERT( FALSE );
return NULL;
}
BITMAPINFOHEADER &bmpInfoHead = *(LPBITMAPINFOHEADER)(pBmpData+dwHeaderLen);
m_wCurBitCount = bmpInfoHead.biBitCount;
m_wMaxBitCount = max( m_wCurBitCount, m_wMaxBitCount );
BITMAPINFO &bmpInfo = *(LPBITMAPINFO)(pBmpData+dwHeaderLen);
LPVOID pdibbit = pBmpData + ((BITMAPFILEHEADER*)pBmpData)->bfOffBits;
CClientDC dc(this);
HBITMAP hbitmap = ::CreateDIBitmap(dc.m_hDC, &bmpInfoHead, CBM_INIT, pdibbit, &bmpInfo, DIB_RGB_COLORS);
if ( hbitmap == NULL )
{
ASSERT( FALSE );
}
return hbitmap;
}