aveDIB(HDIB hDib,CFile&; file) { BITMAPFILEHEADER bmfHdr; LPBITMAPINFOHEADER lpBI; DWORD dwDIBSize; if(!hDib)
return FALSE; lpBI=(LPBITMAPINFOHEADER)::GlobalLock((HGLOBAL)hDib); if(lpBI==NULL) return FALSE; if(!IS_WIN30_DIB(lpBI)) { ::GlobalUnlock((HGLOBAL)hDib); return FALSE; }
bmfHdr.bfType=DIB_HEADER_MARKER; dwDIBSize=*(LPDWORD)lpBI+::PaletteSize((LPSTR)lpBI); if((lpBI->biCompression==BI_RLE8)||(lpBI->biCompression==BI_RLE4)) dwDIBSize+=lpBI->biSizeImage; else { DWORD dwBmBitsSize; dwBmBitsSize=WIDTHBYTES((lpBI->biWidth)*((DWORD)lpBI->biBitCount))*l pBI->biHeight; dwDIBSize+=dwBmBitsSize; lpBI->biSizeImage=dwBmBitsSize; } bmfHdr.bfSize=dwDIBSize+sizeof(BITMAPFILEHEADER); bmfHdr.bfReserved1=0; bmfHdr.bfReserved2=0;
bmfHdr.bfOffBits=(DWORD)sizeof(BITMAPFILEHEADER)+lpBI->biSize+::Pal etteSize((LPSTR)lpBI); TRY { file.Write((LPSTR)&;bmfHdr,sizeof(BITMAPFILEHEADER