www.pudn.com > mfc资源大全1.rar > dibsection_from_bmp.shtml
Bitmap & Palette - Creating a DIB section from a BMP file
// Function prototype with default arguments
HBITMAP LoadDIBSectionFromFile( LPCTSTR lpszFileName, LPVOID *ppvBits=NULL,
HANDLE hSection=NULL, DWORD dwOffset=0) ;
// LoadDIBSectionFromFile - Creates a DIB section from BMP file
// lpszFileName - Name of the BMP file
// ppvBits - to receive address of bitmap bits
// hSection - optional handle to a file mapping object
// dwOffset - offset to the bitmap bit values within hSection
HBITMAP LoadDIBSectionFromFile( LPCTSTR lpszFileName, LPVOID *ppvBits,
HANDLE hSection, DWORD dwOffset)
{
LPVOID lpBits;
CFile file;
if( !file.Open( lpszFileName, CFile::modeRead) )
return NULL;
BITMAPFILEHEADER bmfHeader;
long nFileLen;
nFileLen = file.GetLength();
// Read file header
if (file.Read((LPSTR)&bmfHeader, sizeof(bmfHeader)) != sizeof(bmfHeader))
return NULL;
// File type should be 'BM'
if (bmfHeader.bfType != ((WORD) ('M' << 8) | 'B'))
return NULL;
BITMAPINFO *pbmInfo;
pbmInfo = (BITMAPINFO *)::GlobalAlloc(GMEM_FIXED,
sizeof(BITMAPINFO) + sizeof(RGBQUAD)*256 );
if (pbmInfo == NULL)
return NULL;
// Read the BITMAPINFO
file.Read( pbmInfo, sizeof(BITMAPINFO) + sizeof(RGBQUAD)*256 );
BITMAPINFO &bmInfo = *pbmInfo ;
HBITMAP hBmp = CreateDIBSection( NULL, pbmInfo, DIB_RGB_COLORS, &lpBits,
hSection, dwOffset );
LPBYTE lpDIBBits; // Pointer to DIB bits
int nColors = bmInfo.bmiHeader.biClrUsed ? bmInfo.bmiHeader.biClrUsed :
1 << bmInfo.bmiHeader.biBitCount;
if( bmInfo.bmiHeader.biBitCount > 8 )
lpDIBBits = (LPBYTE)((LPDWORD)(bmInfo.bmiColors +
bmInfo.bmiHeader.biClrUsed) +
((bmInfo.bmiHeader.biCompression == BI_BITFIELDS) ? 3 : 0));
else
lpDIBBits = (LPBYTE)(bmInfo.bmiColors + nColors);
int nOffset = sizeof(BITMAPFILEHEADER) + (lpDIBBits - (LPBYTE)pbmInfo);
file.Seek( nOffset, CFile::begin);
file.ReadHuge((LPSTR)lpBits, nFileLen - nOffset); //bmInfo.biSizeImage );
::GlobalFree(pbmInfo);
if( ppvBits )
*ppvBits = lpBits;
return hBmp;
}
| Goto HomePage |
|
Contact me: zafir@home.com
|