通过以下代码我可以把png图片显示在picture control里了,但是有个问题就是颜色看起来不正确,是不是图片有所损失,请问下有没有方法可以解决呢,谢谢
CStatic *pwnd = (CStatic*)GetDlgItem(IDC_PIC);
CImage image;
image.load("png.png");
HBITMAP hBmp = image.Detach();
pwnd -> SetBitmap(hBmp);
代码我手敲的,如有错误请不要奇怪,谢谢

解决方案 »

  1.   

    应该是和Cimage有关
    你可以试试通过GDI+来显示
      

  2.   

    应该跟程序无关,而是你电脑设置的问题,可能是图片,系统,程序等设定的RGB值不一样所致
      

  3.   

    这个我尝试了以下,如果用setwidowpos设置的宽和高和图片一致的话就显示正常,否则就不正常了,
      

  4.   

    使用GDI+HINSTANCE   hInst   =   AfxGetResourceHandle(); 
    HRSRC   hRsrc   =   ::FindResource   (hInst, 
    MAKEINTRESOURCE(PNG图片ID), 
    _T("PNG"));   //   type
    if   (!hRsrc) 
    return   ; 

    //   load   resource   into   memory 
    DWORD   len   =   SizeofResource(hInst,   hRsrc); 
    BYTE*   lpRsrc   =   (BYTE*)LoadResource(hInst,   hRsrc); 
    if   (!lpRsrc) 
    return   ; 

    //   Allocate   global   memory   on   which   to   create   stream 
    HGLOBAL   m_hMem   =   GlobalAlloc(GMEM_FIXED,   len); 
    BYTE*   pmem   =   (BYTE*)GlobalLock(m_hMem); 
    memcpy(pmem,lpRsrc,len); 
    IStream*   pstm; 
    CreateStreamOnHGlobal(m_hMem,FALSE,&pstm); 


    //   load   from   stream这是关键一句,通过FromStream返回以各Image*,然后在Graphic的DrawImage地方调用就行了! 
    Image *pImg = NULL ; 
    pImg=Gdiplus::Image::FromStream(pstm); 

    //   free/release   stuff 
    GlobalUnlock(m_hMem); 
    pstm-> Release(); 
    FreeResource(lpRsrc); 

    Graphics graphics( GetDC()->m_hDC );
    graphics.DrawImage(pImg, Rect(0, 100, pImg->GetWidth(), pImg->GetHeight()), 
    0, 0, pImg->GetWidth(), pImg->GetHeight(), UnitPixel);//, &imageAtt);