(二)VC界面显示图片(JPG JPEG GIF)

    技术2022-05-11  101

    ()VC界面显示图片(JPG JPEG GIF) http://bbs.xml.org.cn/blog/more.asp?name=joinclear&id=14375

    转载自: 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(); 显示JPEGGIFJPG是一样的。 相比较BMP图像,JPGJPEGGIF图像有很多优点。但BMP图像在VC中的处理好像更理所当然一点,相信这种COM实现显示JPGJPEGGIF图像的处理让我们更是耳目一新。

     

     

    最新回复(0)