最近写个程序,其中需要打开一副png格式的图片,不过vc中好像没有直接提供支持的类或函数啊,各位高手们帮帮忙吧~~~~~~~~~~~~~~~~

解决方案 »

  1.   

    唉,这个你早问我就好了啊,呵呵。如果你有一定的自学能力的话,赶紧打开MSDN(或一些相关网上论坛等)学一下GDI+,你将收获到的,不仅仅是搞定PNG这种琐事!不过当然了,我在这里并不是帮助GDI+搞宣传。GDI+太封闭了。
      

  2.   

    http://www.codeproject.com/bitmap/cximage.asp
      

  3.   

    HRESULT ShowPic(TCHAR* lpstrFile, HWND hWnd, int nScrWidth, int nScrHeight) 
    {
    HDC hDC_Temp=GetDC(hWnd);  IPicture *pPic; 
    IStream *pStm;  BOOL bResult; 
    HANDLE hFile = NULL; 
    DWORD dwFileSize, dwByteRead;  //打开硬盘中的图形文件 
    hFile=CreateFile(lpstrFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);  if (hFile != INVALID_HANDLE_VALUE) 

    dwFileSize=GetFileSize(hFile, NULL);//获取文件字节数 
    if (dwFileSize==0xFFFFFFFF) 
    return E_FAIL; 

    else 

    return E_FAIL; 

    //分配全局存储空间 
    HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize); 
    LPVOID pvData = NULL;  if (hGlobal == NULL) 
    return E_FAIL;  if ((pvData = GlobalLock(hGlobal)) == NULL)//锁定分配内存块 
    return E_FAIL;  ReadFile(hFile, pvData, dwFileSize, &dwByteRead, NULL);//把文件读入内存缓冲区 
    GlobalUnlock(hGlobal); 
    CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);  //装入图形文件 
    bResult = OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&pPic); 

    if(FAILED(bResult)) 
    return E_FAIL;  OLE_XSIZE_HIMETRIC hmWidth;//图片的真实宽度 
    OLE_YSIZE_HIMETRIC hmHeight;//图片的真实高度 
    pPic->get_Width(&hmWidth); 
    pPic->get_Height(&hmHeight); 
    //将图形输出到屏幕上(有点像BitBlt)  bResult = pPic->Render(hDC_Temp, 0, 0, nScrHeight, nScrWidth, 0, hmHeight, hmWidth, -hmHeight, NULL);  pPic->Release(); 

    CloseHandle(hFile);//关闭打开的文件  if (SUCCEEDED(bResult)) 

    return S_OK; 

    else 

    return E_FAIL; 

    }
    以上代码自己改吧,适合更多的图片格式
      

  4.   

    同意用GDI+
    简单方便
    毕竟我们没有必要去研究png等图像的编码原理
    造汽车不必从炼铁开始
      

  5.   

    To LoveInSnowing and 楼主: 不要再使用OleLoadPicture了,那会让你看起来很愚蠢。同样功能的函数,你看看GDI+会有几行:HRESULT ShowPic(const TCHAR* lpstrFile, HDC hDC, int X, int Y, int iWidth, int iHeight)
    {
    _ASSERT(lpstrFile);
    USES_CONVERSION; // Create bitmap object and load image
    auto_ptr<Bitmap> pBmp(new Bitmap(CT2CW(lpstrFile)));
    if(!pBmp.get() || Ok != pBmp->LastStatus())
    return E_FAILED; // Draw bitmap on DC
    Graphic grp(hDC);
    if(Ok != grp.DrawImage(pBmp.get(), X, Y, iWidth, iHeight))
    return E_FAILED; return S_OK;
    }
      

  6.   

    OleLoadPicture 貌似不支持PNG格式。