使用CImage类在Pictrue控件上画图片
(1)从文件中加载图片
voidCScale3DCUserManageView::OnDraw(CDC*pDC){//TODO:在此添加专用代码和/或调用基类CImageimage;//创建图片类USES_CONVERSION;INTre=_access(W2A(m_strUserPicPath),0);//判文件是否存在if(re==-1)return;image.Load(m_strUserPicPath);//根据图片路径加载图片CRectrect;//定义矩形类intcx=image.GetWidth();//获取图片宽度intcy=image.GetHeight();//获取图片高度m_picUserIcon.GetClientRect(&rect);//获得pictrue控件所在的矩形区域CDC*pDC1=m_picUserIcon.GetDC();//获得pictrue控件的DCrect.right=rect.left+126;rect.bottom=rect.top+126;image.Draw(pDC1->m_hDC,rect);//将图片画到Picture控件表示的矩形区域ReleaseDC(pDC1);//释放picture控件的DC}
(2)将CImage转成HBITMAP,代码如下:
CImageimg;CBitmapbitmap;img.Load(strIcon);HBITMAPhbmp=(HBITMAP)img.operatorHBITMAP();
在要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.operatorHBITMAP());//画到主按钮上
(4)CImage取出DLL中的位图资源并显示,如下:
#include<atlimage.h>//在.h中声明CImge类的变量可能需要HINSTANCEtemp=AfxGetResourceHandle();AfxSetResourceHandle(GetModuleHandle(_T("Scale3DCDeviceManage")));//DLL名称m_img.LoadFromResource(AfxGetResourceHandle(),IDB_BITMAP7);AfxSetResourceHandle(temp);//将图片显示到窗口上CPaintDCdc(this);m_img.SetTransparentColor(RGB(255,255,255));//透明色m_img.TransparentBlt(dc.m_hDC,CRect(5,5,40,40));
(5)图像上有CStatic控件,需要局部刷新图像控件
CRectrt;m_staTitle.GetWindowRect(&rt);ScreenToClient(&rt);InvalidateRect(rt);
(6)取出资源中的PNG图片,并显示到Pictrue控件上.
BOOLCInstallDlg::LoadImageFromResource(ATL::CImage*pImage,UINTnResID,LPCTSTRlpTyp){if(pImage==NULL)returnfalse;pImage->Destroy();//查找资源HRSRChRsrc=::FindResource(AfxGetResourceHandle(),MAKEINTRESOURCE(nResID),lpTyp);if(hRsrc==NULL)returnfalse;//加载资源HGLOBALhImgData=::LoadResource(AfxGetResourceHandle(),hRsrc);if(hImgData==NULL){::FreeResource(hImgData);returnfalse;}//锁定内存中的指定资源LPVOIDlpVoid=::LockResource(hImgData);LPSTREAMpStream=NULL;DWORDdwSize=::SizeofResource(AfxGetResourceHandle(),hRsrc);HGLOBALhNew=::GlobalAlloc(GHND,dwSize);LPBYTElpByte=(LPBYTE)::GlobalLock(hNew);::memcpy(lpByte,lpVoid,dwSize);//解除内存中的指定资源::GlobalUnlock(hNew);//从指定内存创建流对象HRESULTht=::CreateStreamOnHGlobal(hNew,TRUE,&pStream);if(ht!=S_OK){GlobalFree(hNew);}else{//加载图片pImage->Load(pStream);GlobalFree(hNew);}//释放资源::FreeResource(hImgData);returntrue;}voidCInstallDlg::OnTimer(UINT_PTRnIDEvent){//TODO:在此添加消息处理程序代码和/或调用默认值staticINTuID=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);}
显示到图片控件中,如下
voidCInstallDlg::OnPaint(){CPaintDCdc(this);CRectrect;CDC*pDC1=m_pic.GetDC();//获得pictrue控件的DCrect.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);
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。