显示图片汇总
2013-06-16 23:07
134 查看
显示图片汇总
上一章总结了加载图片的几种方法,这章我总结一下显示图片的几种常用方法,希望对各位有所帮助1、用Picture控件显示图片
1、首先添加Picture控件,ID为IDC_IMG_BTM2、定义 CBitmap* m_pBitmap;
3、导入图片,并定义ID为IDB_TEST_IMG
4、动态加载代码如下:
CStatic* pImage = (CStatic*)GetDlgItem(IDC_IMG_BTM);
m_pBitmap = new CBitmap;
m_pBitmap->LoadBitmap(IDB_TEST_IMG);
pImage->SetBitmap(HBITMAP(*m_pBitmap));
5、最后别忘了delete m_pBitmap指针。
示例(可更改图片大小):
CStatic *mPicture = (CStatic *)GetDlgItem(pictureGroup1[i]); HICON hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON_CHK), IMAGE_ICON, 16, 16, 0); mPicture->ModifyStyle(0x0,SS_ICON|SS_CENTERIMAGE); mPicture->SetIcon(hIcon);
2、用DC显示图片
//创建DC CClientDC dc(GetDlgItem(资源ID)); //获取图片内容 BITMAP bm; CBitmap* hbmp = CBitmap::FromHandle(LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1))); hbmp->GetBitmap(&bm); CDC dcMem; //创建兼容DC dcMem.CreateCompatibleDC(&dc); CBitmap *pOldBitmap=dcMem.SelectObject(hbmp); CRect lRect; //获取Static控件的大小范围 m_bt_1.GetClientRect(&lRect); //在Static控件上显示位图 //判断是否需要调整到适合画布 dc.StretchBlt(lRect.left, lRect.top, lRect.Width()+100, lRect.Height()+100, &dcMem, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY); dc.SelectObject(pOldBitmap);
3、控件上显示图片
HBITMAP hbitmap; //将pStatic指向要显示的地方 CStatic *pStatic = NULL; //根据ID获取Static控件 pStatic=(CStatic*)GetDlgItem(IDC_BUTTON1); //装载资源*.bmp hbitmap=(HBITMAP)::LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1)); CBitmap hbmp; hbmp.Attach(hbitmap); //获取图片内容 BITMAP bm; hbmp.GetBitmap(&bm); CDC dcMem; //创建兼容DC dcMem.CreateCompatibleDC(GetDC()); CBitmap *pOldBitmap=(CBitmap*)dcMem.SelectObject(hbmp); CRect lRect; //获取Static控件的大小范围 pStatic->GetClientRect(&lRect); //在Static控件上显示位图 pStatic->GetDC()->StretchBlt(lRect.left ,lRect.top ,lRect.Width(),lRect.Height(), &dcMem,0 ,0,bm.bmWidth,bm.bmHeight,SRCCOPY); dcMem.SelectObject(&pOldBitmap);
用这种方法可以在按钮上绘制图片
4、用com显示图片
#include<ocidl.h> #include<olectl.h> // lpstrFile:文件名(最好是包含路径在内) // hWnd // nScrWidth:输出图片的宽度 // nScrHeight:输出图片的高度 // nScrWidth、nScrHeight是输出图片的实际大小,换而言之是指缩放后的尺寸 HRESULT ShowPic(TCHAR *lpstrFile,HWND hWnd,int nScrWidth,int nScrHeight) { HDC hDC_Temp=GetDC(hWnd); IPicture* pPic ; IStream* pStm ; BOOL bResult ; HANDLE hFile=NULL ; DWORD dwFileSize,dwByteRead ; //打开硬盘中的图形文件 hFile=CreateFile(lpstrFile,GENERIC_READ, FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if(hFile!=INVALID_HANDLE_VALUE) { dwFileSize=GetFileSize(hFile,NULL); //获取文件字节数 if(dwFileSize==0xFFFFFFFF) return E_FAIL ; } else { return E_FAIL ; } //分配全局存储空间 HGLOBAL hGlobal=GlobalAlloc(GMEM_MOVEABLE,dwFileSize); LPVOID pvData=NULL ; if(hGlobal==NULL) return E_FAIL ; //锁定分配内存块 if((pvData=GlobalLock(hGlobal))==NULL)return E_FAIL ; ReadFile(hFile,pvData,dwFileSize,&dwByteRead,NULL); //把文件读入内存缓冲区 GlobalUnlock(hGlobal); CreateStreamOnHGlobal(hGlobal,TRUE,&pStm); //装入图形文件 bResult=OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&pPic); if(FAILED(bResult)) return E_FAIL ; OLE_XSIZE_HIMETRIC hmWidth ; //图片的真实宽度 OLE_YSIZE_HIMETRIC hmHeight ; //图片的真实高度 pPic->get_Width(&hmWidth); pPic->get_Height(&hmHeight); if(hmWidth!=0) nScrHeight=(int)((long double)nScrWidth*hmHeight/hmWidth); //将图形输出到屏幕上(有点像BitBlt) bResult=pPic->Render(hDC_Temp,0,0,nScrWidth,nScrHeight, 0,hmHeight,hmWidth,-hmHeight,NULL); pPic->Release(); CloseHandle(hFile); //关闭打开的文件 if(SUCCEEDED(bResult)) { return S_OK ; } else { return E_FAIL ; } }这种方法有一个现成的封装类,下载地址:http://download.csdn.net/detail/windows_nt/5567871
加载图片汇总
相关文章推荐
- php实现随机显示图片方法汇总
- php实现随机显示图片方法汇总
- 显示透明图片的方法汇总
- qt显示图片汇总
- 关于IE背景图片显示100%(背景图片自动伸缩 自适应)
- 图片上传并显示(兼容ie),图片大小判断
- QGIS学习之-显示SVG图片
- 白夜追凶 :手 Q 图片的显示和发送逻辑
- 上传图片,显示,并且把图片信息存储到数据库表中9.17
- 使用VC的Picture control在窗体上显示一副图片
- SWT中显示图片
- qt程序实现多个图片连续显示效果像动画一样
- QT显示自定义图片的方法
- 将数据库中的图片显示
- tableviewCell复用每个cell显示不同图片
- WebView加载网页不显示图片解决办法
- 用Firefox扩展解决百度空间图片不能显示的问题
- 利用GridView显示SD卡的图片和两段文字
- 使用ASP.NET上传图片汇总
- Jquery 鼠标划过图片,图片放大显示