www.pudn.com > SDKSkin.rar > SkinBitMap.h
/****************************************************
** Fujitsu Copyright (C) 2006 - 2007
** 功 能: 从文件中读取位图文件
** 文件名称: SkinBitMap.h
** 文件基类:
** 扩 展 名: h
** 创建日期: 2006-8-6 18:27
** 作 者: 汪荣
*****************************************************/
#define WIDTHBYTES(bits) (((bits) + 31) / 32 * 4) // 计算图像每行象素所占的字节数目;
/*bool LoadSkinBitMap(LPCTSTR stFilename,HBITMAP &m_DIB)
{
LOGPALETTE *pPal;//定义逻辑调色板指针;
pPal = new LOGPALETTE;//初始化该指针;
HANDLE f = CreateFile(stFilename,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (0 == f)
{
return false;
}
BITMAPFILEHEADER bmfHeader;//定义位图文件头结构;
LPBITMAPINFO lpbmi;
DWORD dwBitsSize = 0;
HANDLE hDIB;
LPSTR pDIB;//指向位图数据的指针;
BITMAPINFOHEADER *bmhdr;//指向位图信息头结构的指针
dwBitsSize = GetFileSize(f,&dwBitsSize);
//dwBitsSize = file.GetLength();//得到文件长度
DWORD nReadedBytes = 0;
if(ReadFile(f,(LPVOID)&bmfHeader,sizeof(bmfHeader),&nReadedBytes,0) == 0 ||
nReadedBytes != sizeof(bmfHeader))
{
CloseHandle(f);
return false;
}
if(bmfHeader.bfType != 0x4d42) // 检查该文件是否为BMP格式的文件;
{
CloseHandle(f);
return false;
}
hDIB = (HANDLE) ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, dwBitsSize);
// 为读取图像文件数据申请缓冲区
if (hDIB == 0)
{
CloseHandle(f);
return false;
}
pDIB = (LPSTR) ::GlobalLock((HGLOBAL)hDIB);
// 得到申请的缓冲区的指针;
long dataLen = dwBitsSize - sizeof(BITMAPFILEHEADER);
if(ReadFile(f,pDIB,dataLen,&nReadedBytes,0) == 0 ||
nReadedBytes != dataLen)
{
::GlobalUnlock((HGLOBAL)hDIB);
CloseHandle(f);
hDIB = NULL;
return false;
}
// 此时pDIB数据块中读取的数据包括位图头信息、位图颜色表、图像像素的灰度值;
bmhdr = (BITMAPINFOHEADER*)pDIB; // 为指向位图信息头结构的指针赋值;
::GlobalUnlock((HGLOBAL)hDIB);
m_DIB = (HBITMAP)hDIB; // 将内部变量数据赋于全局变量;
CloseHandle(f);
return true;
}*/