程序返回内存设备的对象,pDC是设备兼容的对象(CreateCompatibleDC(pDC);需要这个参数)
pwidth用于接收图片的实际宽度,pheight接收高
对于返回的CDC使用bitblt来绘制,本代码是用MFC写的,
如果你懂MFC那最好,注意使用完记得调用FreeBmp释放内存
代码这么多其实主要是考虑到错误处理,真正操作图片的代码就不多,就是读取文件数据然后调用CreateDIBitmap再seleteobject而已
CDC*LoadBmp(CString fileName,CDC*pDC,int *pwidth,int *pheight){
CFile cf;//文件变量,用来对文件操作
CFileException e;//出错处理
BITMAPFILEHEADER bmfh;//BMP文件头变量
BITMAPINFOHEADER bmih;//BMP文件信息变量
BYTE *pData;//原始数据
CDC *pMem;//内存设备
HBITMAP hBitmap;//位图
int n;//图象数据中BYTE的个数
int width;//4倍对齐后的宽
if (!cf.Open(fileName,CFile::modeRead, &e))//找到文件后,打开文件
{
MessageBox(NULL,"文件被其他程序占用了","",MB_OK);
return NULL;
}
cf.SeekToBegin();
cf.Read(&bmfh,sizeof(bmfh));//读取文件头
cf.Read(&bmih,sizeof(bmih));//读取文件信息头