HBITMAP CreateDIBsectionFromDibFile(PTSTR szFileName)
{
BITMAPFILEHEADER bmfh;
BITMAPINFO * pbmi;
BYTE * pBits;
BOOL bSuccess;
DWORD dwInfoSize, dwBytesRead;
HANDLE hFile;
HBITMAP hBitmap;
// Open the file: read access, prohibit write access
hFile = CreateFile(szFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
if (hFile == INVALID_HANDLE_VALUE)
return NULL;
// Read in the BITMAPFILEHEADER
bSuccess = ReadFile(hFile, &bmfh, sizeof(BITMAPFILEHEADER), &dwBytesRead, NULL);
if (!bSuccess || (dwBytesRead != sizeof(BITMAPFILEHEADER)) || (bmfh.bfType != *(WORD *) "BM"))
{
CloseHandle(hFile);
return NULL;
}
// Allocate memory for the BITMAPINFO structure & read it in
dwInfoSize = bmfh.bfOffBits - sizeof(BITMAPFILEHEADER);
pbmi = (BITMAPINFO *)malloc(dwInfoSize);
bSuccess = ReadFile(hFile, pbmi, dwInfoSize, &dwBytesRead, NULL);
if (!bSuccess || (dwBytesRead != dwInfoSize))
{
free(pbmi);
CloseHandle(hFile);
return NULL;
}
// Create the DIB Section
hBitmap = CreateDIBSection(NULL, pbmi, DIB_RGB_COLORS, (void **)&pBits, NULL, 0);
if (hBitmap == NULL)
{
free(pbmi);
CloseHandle(hFile);
return NULL;
}
// Read in the bitmap bits
ReadFile(hFile, pBits, bmfh.bfSize - bmfh.bfOffBits, &dwBytesRead, NULL);
free(pbmi);
CloseHandle(hFile);
return hBitmap;
}
CreateDIBsectionFromDibFile
最新推荐文章于 2024-10-10 10:16:01 发布