MFC显示位图图像
参考孔令德老师的《计算几何算法与实现》
将茶壶的位图图形进行显示
在OnDraw中添加如下代码:
// TODO: 在此处为本机数据添加绘制代码
CRect rect;
GetClientRect(&rect);//获得客户区大小
pDC->SetMapMode(MM_ANISOTROPIC);//设置映射模式
pDC->SetWindowExt(rect.Width(),rect.Height());//设置窗口范围
pDC->SetViewportExt(rect.Width(),-rect.Height());//设置视区范围,y向上为正方向
pDC->SetViewportOrg(rect.Width()/2,rect.Height()/2);//设置坐标系原点
rect.OffsetRect(-rect.Width()/2,-rect.Height()/2);//校正客户区矩形
CDC picDC;//声明一个图片缓冲区
picDC.CreateCompatibleDC(pDC);//创建一个与显示缓冲区兼容的图片缓冲区
CBitmap NewBitmap,*pOldBitmap;
NewBitmap.LoadBitmap(IDB_BITMAP1);//位图先添加到资源中,然后从资源中导入位图茶壶
BITMAP bmp;//声明bmp结构体
NewBitmap.GetBitmap(&bmp);//获取维图信息
pOldBitmap=picDC.SelectObject(&NewBitmap);//将位图选入内存DC
picDC.SetMapMode(MM_ANISOTROPIC);//内存DC自定义坐标系
picDC.SetWindowExt(bmp.bmWidth,bmp.bmHeight);
picDC.SetViewportExt(bmp.bmWidth,-bmp.bmHeight);
picDC.SetViewportOrg(bmp.bmWidth/2,bmp.bmHeight/2);
int nX=rect.left+(rect.Width()-bmp.bmWidth)/2;//计算位图居中显示时的左下角点坐标
int nY=rect.top+(rect.Height()-bmp.bmHeight)/2;
pDC->BitBlt(nX,nY,rect.Width(),rect.Height(),&picDC,-bmp.bmWidth/2,-bmp.bmHeight/2,SRCCOPY);//图片拷贝到显示缓冲区
picDC.SelectObject(pOldBitmap);//恢复系统原位图
NewBitmap.DeleteObject();//删除新位图
picDC.DeleteDC();//删除picDC
运行结果: