00001
00002
00003
00004
00005
00006
00007
00008 #include "stdafx.h"
00009 #include "dibapi.h"
00010
00011 #define DIB_HEADER_MARKER ((WORD) ('M' << 8) | 'B')
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 HDIB WINAPI ReadDIBFile(CFile& file)
00031 {
00032 BITMAPFILEHEADER bmfHeader;
00033 DWORD dwBitsSize;
00034 HDIB hDIB;
00035 LPSTR pDIB;
00036
00037 dwBitsSize = (DWORD) file.GetLength();
00038
00039 if (file.Read((LPSTR)&bmfHeader, sizeof(bmfHeader)) != sizeof(bmfHeader))
00040 return NULL;
00041 if (bmfHeader.bfType != DIB_HEADER_MARKER)
00042 return NULL;
00043
00044 hDIB = (HDIB) ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, dwBitsSize);
00045 if (hDIB == 0)
00046 return NULL;
00047
00048 pDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDIB);
00049 if (file.Read(pDIB, dwBitsSize - sizeof(BITMAPFILEHEADER)) !=
00050 dwBitsSize - sizeof(BITMAPFILEHEADER) )
00051 {
00052 ::GlobalUnlock((HGLOBAL) hDIB);
00053 ::GlobalFree((HGLOBAL) hDIB);
00054 return NULL;
00055 }
00056 ::GlobalUnlock((HGLOBAL) hDIB);
00057
00058 return hDIB;
00059 }