用VC做图像处理是打开图像只能打开BMP格式的,代码如下,能不能修改下就可以打开JPG格式的?怎么修改?高手指点下,谢谢 
void CDib::LoadFile(const char *dibFileName) 

strcpy(m_fileName,dibFileName); 
    CFile dibFile(m_fileName, CFile::modeRead); 
    dibFile.Read((void*)&bitmapFileHeader,sizeof(BITMAPFILEHEADER)); 
    if (bitmapFileHeader.bfType == 0x4d42) 
    { 
        DWORD fileLength = dibFile.GetLength();     
        size = fileLength - 
sizeof(BITMAPFILEHEADER); 
        pDib =(BYTE*)GlobalAllocPtr(GMEM_MOVEABLE, size); 
        dibFile.Read((void*)pDib, size); 
        dibFile.Close();         m_pBitmapInfo = (BITMAPINFO*) pDib; 
        m_pBitmapInfoHeader = (BITMAPINFOHEADER*) pDib; 
        m_pRGB = (RGBQUAD*)(pDib + 
m_pBitmapInfoHeader-> biSize); 
        int m_numberOfColors = GetNumberOfColors(); 
        if (m_pBitmapInfoHeader-> biClrUsed == 0) 
            m_pBitmapInfoHeader-> biClrUsed = 
m_numberOfColors; 
        DWORD colorTableSize = m_numberOfColors * 
            sizeof(RGBQUAD); 
        m_pData = pDib + m_pBitmapInfoHeader-> biSize 
            + colorTableSize; 
if (m_pRGB == (RGBQUAD*)m_pData) // No color table 
m_pRGB = NULL; 
        m_pBitmapInfoHeader-> biSizeImage = GetSize(); 
m_valid = TRUE; 
    }     
    else 
    { 
        m_valid = FALSE; 
        AfxMessageBox("This isn't a bitmap file!"); 
    } 

 
 
 

解决方案 »

  1.   

    使用COM接口:// Don't forget to call to AfxOleInit()
    //VC++ 中没有Visual C#中那样方便的图像控件 -_-!!
    void CPICView::OnDraw(CDC* pDC)
    {
      CPICDoc* pDoc = GetDocument();
      ASSERT_VALID(pDoc);
      IPicture *pPic;
      IStream *pStm;
      CFileStatus fstatus;
      CFile file;
      LONG cb;
      if (file.Open("c:/test.jpg", Cfile::modeRead)&&file.GetStatus ("c:/test.jpg",
    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 = (double)pDC->GetDeviceCaps(HORZRES)*(double)hmWidth/((double)pDC->GetDeviceCaps(HORZSIZE)*100.0);
             fY = (double)pDC->GetDeviceCaps(VERTRES)*(double)hmHeight/((double)pDC->GetDeviceCaps(VERTSIZE)*100.0);
    if(FAILED(pPic->Render(*pDC,0,0,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL)))
             AfxMessageBox("Failed To Render The picture!");
             pPic->Release(); 
           }
           else
           {
             AfxMessageBox("Error Loading Picture From Stream!");
           }
         }
      }
    }
    else
    {
      AfxMessageBox("Can"t Open Image File!");
     }