程序:
void CBMPViewer1Doc::OnFileOpen() \\打开图象文件
{
LPCTSTR lpszFilter="BMP Files(*.bmp)|*.bmp|任何文件|*.*||";
CFileDialog dlg(TRUE,lpszFilter,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,lpszFilter,NULL);
CString filename;
CFile file;
BITMAPFILEHEADER bf;
if(dlg.DoModal()==IDOK)
{
filename=dlg.GetPathName();
if(file.Open(filename,CFile::modeRead|CFile::shareDenyNone,NULL)==0)
{
AfxMessageBox("无法打开文件!",MB_OK,0);
return;
}
file.Read(&bf,sizeof(bf));
if(bf.bfType!=0x4d42)
{
AfxMessageBox("非BMP文件!",MB_OK,0);
return;
}
file.Read(&bi,sizeof(bi));
numQuad=0;
if(bi.biBitCount<24)
{
numQuad=1<<bi.biBitCount;
}
pbi=(BITMAPINFO*)HeapAlloc(GetProcessHeap(),0,sizeof(BITMAPINFOHEADER)+numQuad*sizeof(RGBQUAD));
memcpy(pbi,&bi,sizeof(bi));
quad=(RGBQUAD*)((BYTE*)pbi+sizeof(BITMAPINFOHEADER));
if(numQuad!=0)
{
file.Read(quad,sizeof(RGBQUAD)*numQuad);
}
bi.biSizeImage=bf.bfSize-bf.bfOffBits;
lpBuf=(BYTE*)HeapAlloc(GetProcessHeap(),0,bi.biSizeImage);
file.Read(lpBuf,bi.biSizeImage);
file.Close();
flag=1; }}
void CBMPViewer1View::OnPaint() \\显示图象这个是个虚函数
{
CPaintDC dc(this);
CBMPViewer1Doc* pDoc=GetDocument();
ASSERT_VALID(pDoc);
if(pDoc->flag==1)
{ SetDIBitsToDevice(dc.m_hDC,0,0,pDoc->bi.biWidth,pDoc->bi.biHeight,
0,0,0,pDoc->bi.biHeight,pDoc->lpBuf,pDoc->pbi,DIB_RGB_COLORS);
}
Invalidate(FALSE);
}
void CBMPViewer1Doc::OnFileOpen() \\打开图象文件
{
LPCTSTR lpszFilter="BMP Files(*.bmp)|*.bmp|任何文件|*.*||";
CFileDialog dlg(TRUE,lpszFilter,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,lpszFilter,NULL);
CString filename;
CFile file;
BITMAPFILEHEADER bf;
if(dlg.DoModal()==IDOK)
{
filename=dlg.GetPathName();
if(file.Open(filename,CFile::modeRead|CFile::shareDenyNone,NULL)==0)
{
AfxMessageBox("无法打开文件!",MB_OK,0);
return;
}
file.Read(&bf,sizeof(bf));
if(bf.bfType!=0x4d42)
{
AfxMessageBox("非BMP文件!",MB_OK,0);
return;
}
file.Read(&bi,sizeof(bi));
numQuad=0;
if(bi.biBitCount<24)
{
numQuad=1<<bi.biBitCount;
}
pbi=(BITMAPINFO*)HeapAlloc(GetProcessHeap(),0,sizeof(BITMAPINFOHEADER)+numQuad*sizeof(RGBQUAD));
memcpy(pbi,&bi,sizeof(bi));
quad=(RGBQUAD*)((BYTE*)pbi+sizeof(BITMAPINFOHEADER));
if(numQuad!=0)
{
file.Read(quad,sizeof(RGBQUAD)*numQuad);
}
bi.biSizeImage=bf.bfSize-bf.bfOffBits;
lpBuf=(BYTE*)HeapAlloc(GetProcessHeap(),0,bi.biSizeImage);
file.Read(lpBuf,bi.biSizeImage);
file.Close();
flag=1; }}
void CBMPViewer1View::OnPaint() \\显示图象这个是个虚函数
{
CPaintDC dc(this);
CBMPViewer1Doc* pDoc=GetDocument();
ASSERT_VALID(pDoc);
if(pDoc->flag==1)
{ SetDIBitsToDevice(dc.m_hDC,0,0,pDoc->bi.biWidth,pDoc->bi.biHeight,
0,0,0,pDoc->bi.biHeight,pDoc->lpBuf,pDoc->pbi,DIB_RGB_COLORS);
}
Invalidate(FALSE);
}
http://blog.sina.com.cn/u/4a1f4666010007vr