使用CImage类在Pictrue控件上画图片-创新互联
(1)从文件中加载图片
成都创新互联公司主营梅河口网站建设的网络公司,主营网站建设方案,成都App制作,梅河口h5小程序定制开发搭建,梅河口网站营销推广欢迎梅河口等地区企业咨询void CScale3DCUserManageView::OnDraw(CDC* pDC) { // TODO: 在此添加专用代码和/或调用基类 CImage image; //创建图片类 USES_CONVERSION; INT re = _access(W2A(m_strUserPicPath), 0);//判文件是否存在 if (re == -1)return; image.Load(m_strUserPicPath); //根据图片路径加载图片 CRect rect;//定义矩形类 int cx = image.GetWidth();//获取图片宽度 int cy = image.GetHeight();//获取图片高度 m_picUserIcon.GetClientRect(&rect);//获得pictrue控件所在的矩形区域 CDC *pDC1 = m_picUserIcon.GetDC();//获得pictrue控件的DC rect.right = rect.left + 126; rect.bottom = rect.top + 126; image.Draw(pDC1->m_hDC, rect); //将图片画到Picture控件表示的矩形区域 ReleaseDC(pDC1);//释放picture控件的DC }
(2)将CImage转成HBITMAP,代码如下:
CImage img; CBitmap bitmap; img.Load(strIcon); HBITMAP hbmp = (HBITMAP)img.operator HBITMAP();
在要HBITMAP的地方使用.
(3)和用CImage缩小图像,代码如下:
m_img.Load(strIcon);//CImage从路径中加载图片 m_iconImage.Create(32, 32, 32);//CImage相当于创一幅空白图片 m_img.StretchBlt(m_iconImage.GetDC(), CRect(0,0,32,32));//画图 m_iconImage.ReleaseDC();//释放 pAppButton->SetImage(m_iconImage.operator HBITMAP());//画到主按钮上
(4)CImage取出DLL中的位图资源并显示,如下:
#include//在.h中声明CImge类的变量可能需要 HINSTANCE temp = AfxGetResourceHandle(); AfxSetResourceHandle(GetModuleHandle(_T("Scale3DCDeviceManage")));//DLL名称 m_img.LoadFromResource(AfxGetResourceHandle(), IDB_BITMAP7); AfxSetResourceHandle(temp); //将图片显示到窗口上 CPaintDC dc(this); m_img.SetTransparentColor(RGB(255, 255, 255));//透明色 m_img.TransparentBlt(dc.m_hDC, CRect(5, 5, 40, 40));
(5)图像上有CStatic控件,需要局部刷新图像控件
CRect rt; m_staTitle.GetWindowRect(&rt); ScreenToClient(&rt); InvalidateRect(rt);
(6)取出资源中的PNG图片,并显示到Pictrue控件上.
BOOL CInstallDlg::LoadImageFromResource(ATL::CImage *pImage, UINT nResID, LPCTSTR lpTyp) { if(pImage == NULL)return false; pImage->Destroy(); // 查找资源 HRSRC hRsrc = ::FindResource(AfxGetResourceHandle(), MAKEINTRESOURCE(nResID), lpTyp); if (hRsrc == NULL)return false; // 加载资源 HGLOBAL hImgData = ::LoadResource(AfxGetResourceHandle(), hRsrc); if (hImgData == NULL) { ::FreeResource(hImgData); return false; } // 锁定内存中的指定资源 LPVOID lpVoid = ::LockResource(hImgData); LPSTREAM pStream = NULL; DWORD dwSize = ::SizeofResource(AfxGetResourceHandle(), hRsrc); HGLOBAL hNew = ::GlobalAlloc(GHND, dwSize); LPBYTE lpByte = (LPBYTE)::GlobalLock(hNew); ::memcpy(lpByte, lpVoid, dwSize); //解除内存中的指定资源 ::GlobalUnlock(hNew); //从指定内存创建流对象 HRESULT ht = ::CreateStreamOnHGlobal(hNew, TRUE, &pStream); if (ht != S_OK) { GlobalFree(hNew); } else { // 加载图片 pImage->Load(pStream); GlobalFree(hNew); } // 释放资源 ::FreeResource(hImgData); return true; } void CInstallDlg::OnTimer(UINT_PTR nIDEvent) { // TODO: 在此添加消息处理程序代码和/或调用默认值 static INT uID = IDB_PNG1; LoadImageFromResource(&m_img, uID, _T("PNG")); SendMessage(WM_PAINT, 0, 0); SendMessage(WM_ERASEBKGND, 0, 0); uID++; if (uID >= IDB_PNG4)uID = IDB_PNG1; CDialogEx::OnTimer(nIDEvent); }
显示到图片控件中,如下
void CInstallDlg::OnPaint() { CPaintDC dc(this); CRect rect; CDC *pDC1 = m_pic.GetDC();//获得pictrue控件的DC rect.top = 260; rect.left = 0; rect.right = 600; rect.bottom = 260+ 328; m_img.SetTransparentColor(RGB(255, 255, 255)); //m_img.Draw(pDC1->m_hDC, rect); //将图片画到Picture控件表示的矩形区域 m_img.TransparentBlt(pDC1->m_hDC, rect); ReleaseDC(pDC1);//释放picture控件的DC }
图片控件刷新后,才能显示,如下:
SendMessage(WM_PAINT, 0, 0); SendMessage(WM_ERASEBKGND, 0, 0);
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
网页题目:使用CImage类在Pictrue控件上画图片-创新互联
标题路径:http://ybzwz.com/article/hojop.html