怎么样显示一张jpg图,最好有源代码,谢谢
[email protected]

解决方案 »

  1.   

    void CJpgTestDlg::OnButton1() 
    {
    // TODO: Add your control notification handler code here
    IStream *pStm; 
    CFileStatus fstatus; 
    CFile file; 
    LONG cb; 
    CRect r_Show;
    HDC hdc;
    IPicture *pPic; 
    CString m_PhotoPath;
    static char BASED_CODE szFilter[] = "Gif Files (*.gif)|*.gif|Jpeg Files (*.jpg)|*.jpg|All Files (*.*)|*.*||";
    CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter);

        dlg.DoModal();
    m_PhotoPath = dlg.GetPathName( ); m_Show.GetClientRect(r_Show);
    int xpos=r_Show.left;
    int ypos=r_Show.top;
    int Widthpos=r_Show.Width();
    int heightpos=r_Show.Height();  if (file.Open(m_PhotoPath,CFile::modeRead)&&file.GetStatus(m_PhotoPath,fstatus)&& ((cb = fstatus.m_size) != -1)) 

    HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb); 
    LPVOID pvData = NULL; 
    if (hGlobal != NULL) 

    if ((pvData = GlobalLock(hGlobal)) != NULL) 

    file.ReadHuge(pvData, cb); 
    GlobalUnlock(hGlobal); 
    CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);  if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)&pPic))) 

    OLE_XSIZE_HIMETRIC hmWidth; 
    OLE_YSIZE_HIMETRIC hmHeight;  pPic->get_Width(&hmWidth); 
    pPic->get_Height(&hmHeight);  double fX,fY; 
    fX = r_Show.Width();
    fY = r_Show.Height();
    hdc=::GetDC(m_Show.m_hWnd); 
    if(FAILED(pPic->Render(hdc,xpos,ypos,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL))) 
    AfxMessageBox("Failed To Render The picture!"); 

    else 
    AfxMessageBox("Error Loading Picture From Stream!"); 
    }


    GlobalFree(hGlobal);

    else 
    AfxMessageBox("Can't Open Image File!"); }
      

  2.   

    vc 7使用CImage 类
    vc 6可以使用IPicture的com
      

  3.   

    上面的代码太长了,给你一个简单一点的:
    在 papaya_stone(^_^)shentong(^_^) 的帮助下,我完成了从网络上读取(jpg,gif,bmp等)文件的函数,提供给大家使用。本函数从一个指定的url(也可以是文件的路径)读入图形文件,最后返回一个HBITMAP。//程序如下:我是在vs.net下编译的,希望适用于vc6。并请大家参考:
    //http://www.csdn.net/expert/topic/978/978944.xml?temp=.4329645#include <atlbase.h>
    #include <olectl.h>
    #include <atlwin.h>HBITMAP LoadBitmapFromURL(HWND hWnd, LPOLESTR pszURL)
    {
    IPicture* pp = NULL;
    OLE_XSIZE_HIMETRIC nMetricX = 0, nMetricY = 0;
    int nWidth = 0, nHeight = 0;
    HDC hdc = NULL, hDCDst = NULL;
    HBITMAP hBitmap = NULL, hBmpOld = NULL;
    BOOL bOk = FALSE; __try{
    if(FAILED(OleLoadPicturePath(pszURL, NULL, 0, RGB(0,0,0), IID_IPicture, (LPVOID*)&pp)))
    __leave;
    if((hdc = GetDC(hWnd)) == NULL)
    __leave;
    pp->get_Width(&nMetricX);
    pp->get_Height(&nMetricY);
    nWidth = MAP_LOGHIM_TO_PIX(nMetricX, GetDeviceCaps(hdc, LOGPIXELSX));
    nHeight = MAP_LOGHIM_TO_PIX(nMetricY, GetDeviceCaps(hdc, LOGPIXELSY)); if((hDCDst = ::CreateCompatibleDC(hdc)) == NULL)
    __leave;
    if((hBitmap = ::CreateCompatibleBitmap(hdc, nWidth, nHeight)) == NULL)
    __leave;
    hBmpOld = (HBITMAP)::SelectObject(hDCDst, hBitmap);
    if(FAILED(pp->Render(hDCDst, 0, nHeight, nWidth, -nHeight, 0, 0, nMetricX, nMetricY, NULL)))
    __leave;
    bOk = TRUE;
    }
    __finally
    {
    if(hBmpOld != NULL) ::SelectObject(hDCDst, hBmpOld);
    if(!bOk && hBitmap != NULL)
    {
    ::DeleteObject(hBitmap);
    hBitmap = NULL;
    }
    if(hDCDst != NULL) ::DeleteDC(hDCDst);
    if(hdc != NULL) ::ReleaseDC(hWnd, hdc);
    if(pp != NULL) pp->Release();
    } return hBitmap;
    }
      

  4.   

    zhangyilan(数字通信) 
    你的代码没问题,编译没错,但就是出不来,为什么??
      

  5.   

    zhangyilan(数字通信) 
    你的代码没问题,编译没错,但就是出不来,为什么??