(1)从文件中加载图片
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 <atlimage.h>//在.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);
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。