从磁盘中加载图像到窗口中
在开发程序时,通常需要从磁盘中动态加载一幅图像到窗口中。用户可以使用LoadImage函数来从磁盘加载图像文件。
LoadImage函数语法如下:
HANDLE LoadImage( HINSTANCE hinst, LPCTSTR lpszName, UINT uType, int cxDesired, int cyDesired, UINT fuLoad );
参数说明:
hinst:表示包含图像的实例句柄,可以为NULL。
lpszName:表示图像的资源名称,如果从磁盘中加载,该参数表示图像的名称,包含完整路径。
uType:表示加载的图像类型。为IMAGE_BITMAP,表示加载位图,为IMAGE_CURSOR,表示加载鼠标指针,为IMAGE_ICON,表示加载图标。
cxDesired:表示图标或鼠标指针的宽度,如果加载的是位图,则该参数必须为0。
cyDesired:表示图标或鼠标指针的高度,如果加载的是位图,则该参数必须为0。
fuLoad:表示加载类型,如果为LR_LOADFROMFILE,表示从磁盘文件中加载位图。
返回值:函数返回加载的图像资源句柄。
下面通过一个实例介绍如何从磁盘中加载图像到窗口中。
例如,从磁盘中加载图像到窗口中
(1)创建一个单文档/视图结构的应用程序,工程名称为“LoadBmp”。
(2)在视图类中添加一个成员变量m_hBmp。
(3)在视图类的构造函数中调用LoadImage方法从磁盘中加载文件。
CLoadBmpView::CLoadBmpView()
{
//加载位图
m_hBmp = LoadImage(NULL,"Demo.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
}
(4)在视图类的OnDraw方法中绘制位图。
void CLoadBmpView::OnDraw(CDC* pDC)
{
CLoadBmpDoc* pDoc = GetDocument(); //获取文档对象
ASSERT_VALID(pDoc); //验证文档对象
CBitmap bmp; //定义一个位图对象
bmp.Attach(m_hBmp); //将位图关联到位图句柄上
CDC memDC; //定义一个设备上下文
memDC.CreateCompatibleDC(pDC); //创建兼容的设备上下文
memDC.SelectObject(&bmp); //选中位图对象
BITMAP BitInfo; //定义位图结构
bmp.GetBitmap(&BitInfo); //获取位图信息
int x = BitInfo.bmWidth; //获取位图宽度
int y = BitInfo.bmHeight; //获取位图高度
pDC->BitBlt(0,0,x,y,&memDC,0,0,SRCCOPY); //向窗口中绘制位图
bmp.Detach(); //分离位图句柄
memDC.DeleteDC(); //释放设备上下文对象
}
说明:在使用BitBlt方法对图像进行绘制时,目标设备上下文的大小应与当前设备上下文的大小相同,否则在绘制时就应指定图像拷贝的区域。
(5)运行程序,效果如图1所示。
.jpg)
图1 加载磁盘中的图像文件