http://www.diybl.com/course/3_program/vc/vc_js/20071119/86882.html
简述实现步骤如下:
1、通过点击浏览按钮选择JPG图像文件
点击浏览按钮打开文件对话框选择JPG图像文件,得到文件所在的路径目录。
关键代码如下:
1 |
char szFilter[] = "JPG Files (*.jpg)|*.jpg|JPEG Files (*.jpeg)|*.jpeg|GIF Files (*.gif)|*.gif|All Files (*.*)|*.*||" ; |
2 |
CFileDialog dlg(TRUE, "jpg|jpeg|gif" ,NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter); |
3 |
if (dlg.DoModal() == IDOK) |
5 |
CString strPathName = dlg.GetPathName(); |
2、加载JPG文件到内存
主要通过COM类—IPicture实现。
关键代码如下:
01 |
BOOL CShowJPGDlg::LoadJPGFile( const char *pPathname) |
04 |
if ( !file.Open( pPathname, CFile::modeRead) ) |
08 |
m_nFileLen = file.GetLength(); |
10 |
HGLOBAL hMem = ::GlobalAlloc( GMEM_MOVEABLE, m_nFileLen ); |
11 |
LPVOID lpBuf = ::GlobalLock( hMem ); |
12 |
if ( file.ReadHuge( lpBuf, m_nFileLen ) != m_nFileLen ) |
16 |
::GlobalUnlock( hMem ); |
18 |
if ( CreateStreamOnHGlobal( hMem, TRUE, &pStream ) !=S_OK ) |
21 |
if ( OleLoadPicture( pStream, m_nFileLen, TRUE, IID_IPicture, ( LPVOID * )&pPicture ) !=S_OK ) |
3、在屏幕上显示JPG图像
主要通过Render函数实现显示JPG图像。
Render函数说明
01 |
HRESULT Render( HDC hdc, |
06 |
OLE_XPOS_HIMETRIC xSrc, |
07 |
OLE_YPOS_HIMETRIC ySrc, |
08 |
OLE_XSIZE_HIMETRIC cxSrc, |
09 |
OLE_YSIZE_HIMETRIC cySrc, |
关键代码如下:
01 |
void CShowJPGDlg::DrawImage( int x, int y, CDC *pDC) |
06 |
pPicture->get_Width( &nWidth ); |
07 |
pPicture->get_Height( &nHeight ); |
17 |
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图像的处理让我们更是耳目一新。