| « | January 2026 | » | | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | |
| 公告 |
| 暂无公告... |
| Blog信息 |
|
blog名称: 日志总数:21 评论数量:94 留言数量:1 访问次数:145998 建立时间:2006年1月9日 |

| |
|
[Visual C++](二)VC界面显示图片(JPG JPEG GIF) 原创空间, 文章收藏, 软件技术
joinclear 发表于 2006/5/13 18:04:27 |
| 转载自: http://www.vclife.net/articles/article_view.asp?atlid=7
简述实现步骤如下:
1、通过点击浏览按钮选择JPG图像文件点击浏览按钮打开文件对话框选择JPG图像文件,得到文件所在的路径目录。关键代码如下:char szFilter[] = "JPG Files (*.jpg)|*.jpg|JPEG Files (*.jpeg)|*.jpeg|GIF Files (*.gif)|*.gif|All Files (*.*)|*.*||";CFileDialog dlg(TRUE,"jpg|jpeg|gif",NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter);if(dlg.DoModal() == IDOK){CString strPathName = dlg.GetPathName(); }
2、加载JPG文件到内存主要通过COM类—IPicture实现。关键代码如下:BOOL CShowJPGDlg::LoadJPGFile(const char *pPathname){ CFile file; if( !file.Open( pPathname, CFile::modeRead) ) return FALSE;
DWORD m_nFileLen; m_nFileLen = file.GetLength();
HGLOBAL hMem = ::GlobalAlloc( GMEM_MOVEABLE, m_nFileLen ); LPVOID lpBuf = ::GlobalLock( hMem ); if( file.ReadHuge( lpBuf, m_nFileLen ) != m_nFileLen ) return FALSE; file.Close();
::GlobalUnlock( hMem );
if ( CreateStreamOnHGlobal( hMem, TRUE, &pStream ) !=S_OK ) return FALSE; if ( OleLoadPicture( pStream, m_nFileLen, TRUE, IID_IPicture, ( LPVOID * )&pPicture ) !=S_OK ) return FALSE; return TRUE;}
3、在屏幕上显示JPG图像主要通过Render函数实现显示JPG图像。Render函数说明HRESULT Render( HDC hdc, //设备环境句柄 long x, //在hdc上的水平坐标 long y, //在hdc上的垂直坐标 long cx, //图像宽度 long cy, //图像高度 OLE_XPOS_HIMETRIC xSrc, //在源图像上的水平偏移 OLE_YPOS_HIMETRIC ySrc, //在源图像上的垂直偏移 OLE_XSIZE_HIMETRIC cxSrc, //在源图像上水平拷贝的数量 OLE_YSIZE_HIMETRIC cySrc, //在源图像上垂直拷贝的数量 LPCRECT prcWBounds //指向目标图元设备环境句柄的指针 );关键代码如下:void CShowJPGDlg::DrawImage(int x, int y, CDC *pDC){ if (pPicture != NULL) { long nWidth,nHeight; pPicture->get_Width( &nWidth ); pPicture->get_Height( &nHeight ); /* //图片原大显示 CSize sz( nWidth, nHeight ); pDC->HIMETRICtoDP( &sz ); pPicture->Render(pDC->m_hDC,0,0,sz.cx,sz.cy,0,nHeight,nWidth,-nHeight,NULL); */ //按窗口尺寸显示 CRect rect; GetClientRect(&rect); pPicture->Render(pDC->m_hDC,x,y,rect.Width(),rect.Height(),0,nHeight,nWidth,-nHeight,NULL); }}
注意:由于是主要通过COM类—IPicture实现的,不要忘记了CoInitialize(NULL);,用完了CoUninitialize();。显示JPEG、GIF和JPG是一样的。相比较BMP图像,JPG、JPEG、GIF图像有很多优点。但BMP图像在VC中的处理好像更理所当然一点,相信这种COM实现显示JPG、JPEG、GIF图像的处理让我们更是耳目一新。
具体的程序请参考附带的例子,例子里面有详细的注释。
|
|
|
回复:(二)VC界面显示图片(JPG JPEG GIF) 原创空间, 文章收藏, 软件技术
hnjk(游客)发表评论于2010/11/24 21:03:18 |
|
|
回复:(二)VC界面显示图片(JPG JPEG GIF) 原创空间, 文章收藏, 软件技术
图片(游客)发表评论于2006/10/11 21:31:47 |
|
|
回复:(二)VC界面显示图片(JPG JPEG GIF) 原创空间, 文章收藏, 软件技术
adong(游客)发表评论于2006/7/28 11:04:16 |
| 怎样才能不通过点击浏览按钮选择JPG图像文件而可以在程序中指定路径后程序运行后可以直接在屏幕上显示出图象?我邮箱qinshandongrena@163.com
,谢了!!!! |
|
|
回复:(二)VC界面显示图片(JPG JPEG GIF) 原创空间, 文章收藏, 软件技术
dragon527(游客)发表评论于2006/7/25 9:43:28 |
| 请问: 要是用VC的Win32 Application,即完全用Windows程序,怎样实现同样的功能:将当前目录下的jpg/bmp/gif图片加载到窗口显示? |
|
» 1 »
|