更新时间:2018-12-19 15:59:04浏览次数:1+次
CImage image;
image.Load(_T("E:/1.jpg"));// - 加载一幅外部图像
image.Destroy();// - 用完图片后销毁释放内存
加载图片成功后,就是要显示图像了。然而我们要先确定图片显示在何处,所以,我们要获取显示图片的相关信息。我们使用CRect类来创建对象,用这个对象接收获取到的矩形信息。然后调用对应的窗口或者控件的获取客户区大小函数得到矩形信息。
CStatic * pImgFrame = (CStatic *)GetDlgItem(IDC_PIC);
所有静态控件都是CStatic类类型,包括Static标签、图片控件等。使用GetDlgItem函数,并传入控件的ID,即可返回控件的窗口指针,不过是CWnd父类指针,所以要做一个强制转换。
pImgFrame->GetClientRect(&rect);// - 获取控件客户区大小矩形
因为要在控件上画图,贴图就是要画图的意思。所以要获取这个控件窗口上的画图的设备上下文对象指针,即调用这个控件对象的GetDC成员函数。代码如下:
CDC * pDC = pImgFrame->GetDC(); // - 获取控件的画图对象指针
然后一切就绪,只欠东风了。要贴图,先设置一下贴图模式。因为原始图像和得到的矩形的大小可能不一样,所以要确定如何处理大小变换涉及到的像素的删减问题。这就是设置模式的原因。我们设置为COLORONCOLOR模式,可以保持比较好的效果。代码如下:
SetStretchBltMode(pDC->GetSafeHdc(), COLORONCOLOR);// - 设置拉伸图片的模式
然后就是最后一步,贴图。调用CImage的成员函数StretchBlt来将加载的图片贴到控件上,代码如下:
image.StretchBlt(pDC->GetSafeHdc(), 0, 0, rect.Width(), rect.Height(), 0, 0, image.GetWidth(), image.GetHeight(), SRCCOPY);
这样一来,就实现了贴图的效果。完整的代码如下:
CImage image;
image.Load(_T("E:/1.jpg"));// - 加载一幅外部图像
CStatic * pImgFrame = (CStatic *)GetDlgItem(IDC_PIC);// - 获取控件对象指针,可以是任何窗口和控件
CRect rect;
pImgFrame->GetClientRect(&rect);// - 获取控件客户区大小矩形
CDC * pDC = pImgFrame->GetDC(); // - 获取控件的画图对象指针
SetStretchBltMode(pDC->GetSafeHdc(), COLORONCOLOR);// - 设置拉伸图片的模式
image.StretchBlt(pDC->GetSafeHdc(), 0, 0, rect.Width(), rect.Height(), 0, 0, image.GetWidth(), image.GetHeight(), SRCCOPY);// - 将图像拉伸显示在控件上
image.Destroy();
效果截图如下:
pDC->GetSafeHdc();
返回的类型就是HDC类型了。然后接下来指定的是画图的位置,这个位置是在控件客户区内。客户区内左上角为原点(0,0),向右为x轴正向,向下为y轴正向。确定目标是画在什么控件上就是看HDC关联的信息了。因为这个我们在前面是用控件来获取的,自然关联到的是控件。
pDC->SetViewportOrg(rect.Width(), 0);// - 将视口移到右上角
然后我们画图的起始点在右上角,此时右上角为(0,0)了。然后设置画图结束的点,为负数。代码如下:image.StretchBlt(pDC2->GetSafeHdc(), 0, 0, rect2.Width()*(-1)-1, rect2.Height(), 0, 0, image.GetWidth(), image.GetHeight(), SRCCOPY);
目标结束点的x坐标就是负数了。对于还要减一,是让图片绘制的位置和矩形完全吻合。这样就实现了水平翻转。完整的代码如下:CImage image;
image.Load(_T("E:/1.jpg"));// - 加载一幅外部图像
CStatic * pImgFrame = (CStatic *)GetDlgItem(IDC_PIC);// - 获取控件对象指针,可以是任何窗口和控件
CRect rect;
pImgFrame->GetClientRect(&rect);// - 获取控件客户区大小矩形
CDC * pDC = pImgFrame->GetDC(); // - 获取控件的画图对象指针
SetStretchBltMode(pDC->GetSafeHdc(), COLORONCOLOR);// - 设置拉伸图片的模式
pDC->SetViewportOrg(rect.Width(), 0);
image.StretchBlt(pDC->GetSafeHdc(), 0, 0, rect.Width()*(-1) - 1, rect.Height(), 0, 0, image.GetWidth(), image.GetHeight(), SRCCOPY);// - 将图像拉伸显示在控件上
image.Destroy();
效果截图如下:pDC->SetViewportOrg(0, rect.bottom);
image.StretchBlt(pDC->GetSafeHdc(), 0, 0, rect.Width(), rect.Height()*(-1) - 1, 0, 0, image.GetWidth(), image.GetHeight(), SRCCOPY);
效果截图如下:pDC->SetViewportOrg(rect.Width(), rect.bottom);
image.StretchBlt(pDC->GetSafeHdc(), 0, 0, rect.Width()*(-1) - 1, rect.Height()*(-1) - 1, 0, 0, image.GetWidth(), image.GetHeight(), SRCCOPY);
效果截图如下:相关资讯