我看了一些代码
好像为了显示JPG图像,大家都是先把JPG转换成BMP,然后显示出来能不能直接就显示JPG图像?

解决方案 »

  1.   

    see this , can help you.
    http://www.codeproject.com/bitmap/cpicture.asp
    http://www.codeproject.com/bitmap/pictureshow.asp
      

  2.   

    你的想法不可行,包括BMP在内,都需要转换为DIB等形式才能显示!
      

  3.   

    void LoadJpgPic(char *JpgFileName, int PosX, int PosY)
    {
    IPicture *pPic;
    IStream *pStm; 
    CFileStatus fstatus;
    CFile file;
    LONG cb;
    DWORD dw=0;
    if (file.Open(JpgFileName,CFile::modeRead)&&file.GetStatus(JpgFileName,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); 
    long ltx=MAP_LOGHIM_TO_PIX(hmWidth, GetDeviceCaps(::GetDC(m_hWnd), LOGPIXELSX));
    long lty=MAP_LOGHIM_TO_PIX(hmHeight, GetDeviceCaps(::GetDC(m_hWnd), LOGPIXELSX));
    double fX,fY;
    HDC hDC=::GetDC(m_hWnd);
    //获得象素值
    fX=(double)GetDeviceCaps(hDC,HORZRES);//*(double)hmWidth/((double)dc.GetDeviceCaps(HORZSIZE)*100.0); 
    fY=(double)GetDeviceCaps(hDC,VERTRES);//*(double)hmHeight/((double)dc.GetDeviceCaps(VERTSIZE)*100.0); 
    if(FAILED(pPic->Render(hDC,PosX,PosY+lty,ltx,-lty,0,0,hmWidth,hmHeight,NULL))) 
    AfxMessageBox("Failed To Render The picture!"); 
    file.Close();
    pPic->Release(); 
    }  else 
    {
    AfxMessageBox("Error Loading Picture From Stream!"); 

    }
    }
    }
    }
    }
      

  4.   

    从实质上,确实如prog_st所言!
    不过借助第三方开发的工具类,可以做到直接传入JPG文件显示!工具类负责显示所必要的转换!
      

  5.   

    http://www.csdn.net/Develop/Read_Article.asp?Id=12866