1、通过点击浏览按钮选择BMP图像文件
点击浏览按钮打开文件对话框选择BMP图像文件,得到文件所在的路径目录。
关键代码如下:
void
CShowBMPDlg::OnButtonSelectiamge()

...
{
charszFilter[]="BMPFiles(*.bmp)|*.bmp|AllFiles(*.*)|*.*||";
CFileDialogdlg(TRUE,"BMP",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter);
if(dlg.DoModal()==IDOK)

...{
strPathName=dlg.GetPathName();
LoadShowBMPFile(strPathName);
m_hBitmap=BufferToHBITMAP();
Invalidate();
}
}
2、加载BMP文件到内存
通过得到的BMP图像文件路径目录,加载BMP图像文件到内存中。
关键代码如下:
BOOLCShowBMPDlg::LoadShowBMPFile(
const
char
*
pPathname)

...
{
CFilefile;
if(!file.Open(pPathname,CFile::modeRead))
returnFALSE;
DWORDm_nFileLen;
m_nFileLen=file.GetLength();
m_pBMPBuffer=newchar[m_nFileLen+1];
if(!m_pBMPBuffer)
returnFALSE;
if(file.Read(m_pBMPBuffer,m_nFileLen)!=m_nFileLen)
returnFALSE;
returnTRUE;
}
3、将内存中的BMP文件内容转换到HBITMAP
将内存中的BMP文件内容转换成位图句柄。
关键代码如下:
HBITMAPCShowBMPDlg::BufferToHBITMAP()

...
{
HBITMAPhShowBMP;
LPSTRhDIB,lpBuffer=m_pBMPBuffer;
LPVOIDlpDIBBits;
BITMAPFILEHEADERbmfHeader;
DWORDbmfHeaderLen;

bmfHeaderLen=sizeof(bmfHeader);
strncpy((LPSTR)&bmfHeader,(LPSTR)lpBuffer,bmfHeaderLen);

if(bmfHeader.bfType!=(*(WORD*)"BM"))returnNULL;
hDIB=lpBuffer+bmfHeaderLen;
BITMAPINFOHEADER&bmiHeader=*(LPBITMAPINFOHEADER)hDIB;
BITMAPINFO&bmInfo=*(LPBITMAPINFO)hDIB;
m_bmW=bmiHeader.biWidth;
m_bmH=bmiHeader.biHeight;
lpDIBBits=(lpBuffer)+((BITMAPFILEHEADER*)lpBuffer)->bfOffBits;
CClientDCdc(this);
hShowBMP=CreateDIBitmap(dc.m_hDC,&bmiHeader,CBM_INIT,lpDIBBits,&bmInfo,DIB_RGB_COLORS);
returnhShowBMP;
}
4、在屏幕上显示BMP图像
双缓冲实现BMP位图显示在屏幕上。
关键代码如下:
void
CShowBMPDlg::DrawImage(
int
x,
int
y,CDC
*
pDC)

...
{
HBITMAPOldBitmap;
CDCMemDC;
MemDC.CreateCompatibleDC(pDC);
OldBitmap=(HBITMAP)MemDC.SelectObject(m_hBitmap);

CBitmap*pBitmap=CBitmap::FromHandle(m_hBitmap);
if(m_bmW==0||m_bmH==0)
return;
CRectrect;
GetClientRect(&rect);

/**//*str.Format("%d%d",rect.Width(),rect.Height());
MessageBox(str);*/
pDC->BitBlt(x,y,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY);

GetRGB(MemDC);

MemDC.SelectObject(OldBitmap);
}
点击浏览按钮打开文件对话框选择BMP图像文件,得到文件所在的路径目录。
关键代码如下:














通过得到的BMP图像文件路径目录,加载BMP图像文件到内存中。
关键代码如下:















将内存中的BMP文件内容转换成位图句柄。
关键代码如下:
























双缓冲实现BMP位图显示在屏幕上。
关键代码如下:





















